Handler的作用一般是子线程向主线程中传递消息,用来主线程处理和UI相关的东西。为什么要在子线程中用呢,因为如果主线程处理了过多耗时的东西,可能会导致假死,所以一般都放到子线程中去处理耗时的东西。
先看下上面的界面。就是这样子,模拟一个耗时操作,然后下载完成后关闭对话框。
看下主Activity:
-
package com.howlaa.lesson27_handler;
-
-
import android.os.Bundle;
-
import android.os.Handler;
-
import android.os.Message;
-
import android.app.Activity;
-
import android.app.ProgressDialog;
-
import android.content.res.Resources;
-
import android.util.Log;
-
import android.view.Menu;
-
import android.view.View;
-
import android.widget.Button;
-
-
public class MainHandler extends Activity {
-
-
-
private Button b1;
-
private ProgressDialog pd;
-
-
-
private Handler handler =new Handler(){
-
@Override
-
-
public void handleMessage(Message msg){
-
super.handleMessage(msg);
-
-
pd.dismiss();
-
}
-
};
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main_handler);
-
Resources res= this.getResources();
-
-
Log.i("tag", "onCreate()-->"+Thread.currentThread().getName());
-
-
b1= (Button)findViewById(R.id.Button01);
-
-
b1.setOnClickListener(new View.OnClickListener() {
-
-
@Override
-
public void onClick(View v) {
-
-
processThread();
-
}
-
});
-
}
-
-
private void processThread(){
-
-
pd= ProgressDialog.show(MainHandler.this, "下载文件", "正在下载……");
-
Log.i("tag", "processThread()-->"+Thread.currentThread().getName());
-
-
new Thread(){
-
@Override
-
public void run(){
-
Log.i("tag", "run()-->"+Thread.currentThread().getName());
-
-
longTimeMethod();
-
-
handler.sendEmptyMessage(0);
-
}
-
-
}.start();
-
}
-
-
-
private void longTimeMethod(){
-
try {
-
Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName());
-
Thread.sleep(10000);
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
}
-
}
-
-
-
-
}
layout界面就不需要贴啦。
阅读(831) | 评论(0) | 转发(0) |