我忙於爲Android設備製作應用程序。現在我正在測試一些東西。使用線程睡眠更新UI
我想改變背景顏色的限制時間,讓我們說5次。每次背景改變時,我都希望它在2-3秒後再次改變。
如果我使用Thread類,它會在Thread完成後加載整個模板,但看不到顏色變化,但它們在「背景」中運行(我可以在LogCat中看到) 。
我希望有一個教程或一個我可以使用的例子。
謝謝!
我忙於爲Android設備製作應用程序。現在我正在測試一些東西。使用線程睡眠更新UI
我想改變背景顏色的限制時間,讓我們說5次。每次背景改變時,我都希望它在2-3秒後再次改變。
如果我使用Thread類,它會在Thread完成後加載整個模板,但看不到顏色變化,但它們在「背景」中運行(我可以在LogCat中看到) 。
我希望有一個教程或一個我可以使用的例子。
謝謝!
我最近學會了如何做到這一點。這裏有一個很好的教程: http://www.vogella.com/articles/AndroidPerformance/article.html#handler
起初有點棘手,你在主線程上執行,你啓動一個子線程,並回發到主線程。
我做了這個小活動閃爍的按鈕和關閉,以確保我知道發生了什麼事:
公共類HelloAndroidActivity延伸活動{
/** Called when the activity is first created. */
Button b1;
Button b2;
Handler myOffMainThreadHandler;
boolean showHideButtons = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myOffMainThreadHandler = new Handler(); // the handler for the main thread
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
}
public void onClickButton1(View v){
Runnable runnableOffMain = new Runnable(){
@Override
public void run() { // this thread is not on the main
for(int i = 0; i < 21; i++){
goOverThereForAFew();
myOffMainThreadHandler.post(new Runnable(){ // this is on the main thread
public void run(){
if(showHideButtons){
b2.setVisibility(View.INVISIBLE);
b1.setVisibility(View.VISIBLE);
showHideButtons = false;
} else {
b2.setVisibility(View.VISIBLE);
b1.setVisibility(View.VISIBLE);
showHideButtons = true;
}
}
});
}
}
};
new Thread(runnableOffMain).start();
}
private void goOverThereForAFew() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
使用處理程序在你的UI線程:
Handler mHandler = new Handler();
Runnable codeToRun = new Runnable() {
@Override
public void run() {
LinearLayout llBackground = (LinearLayout) findViewById(R.id.background);
llBackground.setBackgroundColor(0x847839);
}
};
mHandler.postDelayed(codeToRun, 3000);
處理程序將運行自己喜歡的任意代碼,在UI線程上,在指定的時間量之後。
所以,簡單而有效。這是添加延遲線程的完美選擇。謝謝Zaid! –