在Android开发中我们常常用到Handler这个类去处理消息队列中的消息,以下这个例子实现的是利用Handler传递一个消息给线程,线程运行run()方法去更新进度条的进度,以下是源代码:
public class MainActivity extends Activity {
private Button button;
private Button button2;
private Button button3;
private ProgressBar progressBar;
private int counter=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("BruceZhang", "mainActivity--->"+Thread.currentThread().getId());
Log.d("BruceZhang", "mainActivity--->"+Thread.currentThread().getName());
button=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
progressBar=(ProgressBar)findViewById(R.id.progressbar);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//handler.post(runnable);
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//handler.removeCallbacks(runnable);
}
});
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(counter==1){
handler.post(runnable);
}
else if (counter==2) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(0);
}
}
});
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d("BruceZhang", "Thread--->"+Thread.currentThread().getId());
Log.d("BruceZhang", "Thread--->"+Thread.currentThread().getName());
}
}).start();
}
/* Handler handler=new Handler();
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d("runnable", "update");
handler.postDelayed(runnable, 2000);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}*/
@SuppressLint("HandlerLeak")
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
progressBar.setProgress(msg.arg1);
handler.post(runnable);
}
};
Runnable runnable=new Runnable() {
int i=0;
@Override
public void run() {
Log.d("BruceZhang", Thread.currentThread().getId()+"");
Log.d("BruceZhang", Thread.currentThread().getName());
// TODO Auto-generated method stub
i+=10;
Message message=handler.obtainMessage();
message.arg1=i;
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
handler.sendMessage(message);
if(i>=progressBar.getMax()){
handler.removeCallbacks(runnable);
progressBar.setVisibility(View.GONE);
counter+=1;
}
}
};
}