在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; } } }; }