ProgressBa r 施用Handler

ProgressBa r 使用Handler

e.g.使用Handler更新ProgressBar

----------------------------------

public class HandleActivity extends Activity{ //声明两个按钮控件 private Button startButton=null; private Button endButton=null; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); } class StartButtonListener implements onClickListener{ public void onClick(View v){ handler.post(updateThread);//调用Handler的post方法,将要执行的线程对象添加到队列当中 } } class EndButtonListener implements OnClickListener{ public void onClick(View v){ handler.removeCallbacks(updateThread); } } //创建一个Handler对象 Handler handler=new Handler(); //将要执行的操作写在线程对象的run方法中 Runnale updateThread=new Runnable(){ public void run(){ System.out.println("updateThread"); //在run方法内部,执行postDelayed或者是post方法 handler.postDelayed(updateThread,3000);//隔3000毫秒过后,将线程放到消息队列中去 } } }



  

 

 

下面的代码是进度条:

Runnable progressThread=new Runnable(){ int i=0; public void run(){ i=i+10; //得到一个消息对象,Message类是由Android操作系统提供 Message msg=updateBarHandler.obtainMessage(); //将msg对象的arg1参数的值设置为i;还有个成员变量为arg2 msg.arg1=i; try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } } //.................................. class ButtonOnClickListener implements OnClickListener{ @Override public void onClick(View arg0) { handler.post(updateThread); } } Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { bar.setProgress(msg.arg1); handler.post(updateThread); } }; private Runnable updateThread=new Runnable() { int i=0; @Override public void run() { i+=10; Message msg=handler.obtainMessage(); msg.arg1=i; try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //将msg对象放入消息队列当中 handler.sendMessage(msg); if(i==100){ handler.removeCallbacks(updateThread); } } };



 ...............................................................................

 

 

      

8.2.Handler与线程

1.采用post方法将消息放入队列的过程中,没有启动新的线程,而只是启动了run方法。解决方法

..先启动一个HandlerThread对象,然后使用HanderThreadgetLooper()方法之前,必须先使用该类的start()方法。

然后自己定义的handler必须复写MyHandler(Looper looper);

 

2.Bundle的用法

3.在新线程当中处理消息的方法

  public class ThreadActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity2); System.out.println(Thread.currentThread().getId()); //生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android提供 HandlerThread handlerThread=new HandlerThread("handler_thread"); handlerThread.start(); MyHandler myHandler=new MyHandler(handlerThread.getLooper()); Message msg=myHandler.obtainMessage(); Bundle b=new Bundle(); b.putInt("age", 20); b.putString("name", "John"); //msg.obj="abc";msg.setData(b ); //将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象 msg.sendToTarget(); } class MyHandler extends Handler{ public MyHandler(){} public MyHandler(Looper looper){ super(looper); } @Override public void handleMessage(Message msg) { System.out.println("Handler-->"+Thread.currentThread().getId()); } } }