Handler主要用于异步消息的处理。
这里点击了按钮之后在run方法中设置message的alg1的值,每次通过sendMessage把message对象压入消息队列。在handleMessage方法中取出消息队列中的message对象,并设置progressBar的值,然后再把线程对象加入线程队列。这个循环一直运行到进度条走到头~~。
package com.example.prograssbarhandle; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class MainActivity extends Activity { private ProgressBar pb1=null; private Button bt1=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt1=(Button)findViewById(R.id.but); pb1=(ProgressBar)findViewById(R.id.firstBar); pb1.setVisibility(View.VISIBLE); bt1.setOnClickListener(new bt1listener()); } class bt1listener implements OnClickListener{ public void onClick(View arg0) { // TODO Auto-generated method stub hl1.post(run1); } } Handler hl1=new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub pb1.setProgress(msg.arg1); hl1.post(run1); } }; Runnable run1=new Runnable() { int i=0; public void run() { // TODO Auto-generated method stub i+=10; //得到一个消息对象 Message msg=hl1.obtainMessage(); msg.arg1=i; try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } if(i>=100){ i=0; pb1.setProgress(i); // bt1.setText("dawda"); hl1.removeCallbacks(run1); return; } hl1.sendMessage(msg); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" tools:context=".MainActivity" /> <Button android:id="@+id/but" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start" /> <ProgressBar android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/firstBar" style="?android:attr/progressBarStyleHorizontal" /> </LinearLayout>