Android 之 Handler 的使用(一)

      当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是Handler。

下面是一个简单从web服务器端下载MP3文件的例子:

public  class HandlerThreadTest  extends  Activity(){

      @Override

        protected void  onCreate(Bundle savedInstanceState){

               super.onCreate(savedInstanceState);

               setContentView(R.layout.main);

               //查看当前线程的ID

               System.out.println(Thread.currentThread().getName()+"---"+Thread.currentThread().getId());

               //HandlerThread对象,内部已经实现循环处理消息的功能
               HandlerThread handlerThread = new HandlerThread("handler-thread");

               handlerThread.start();              

              System.out.println(Thread.currentThread().getName()+"---"+Thread.currentThread().getId());
               //创建Handler
              MyHandler handler = new MyHandler(handlerThread.getLooper());
              //获取一个消息对象
              Message msg = handler.obtainMessage();
              msg.sendToTarget();

        }

}





public class MyHandler extends Handler{

      String urlPath="xxx";

       public MyHandler(Looper looper){

              super(looper);

        }

        @Override

        public void handleMessage(Message msg){

                  super.handleMessage(msg);

                   loadMusic(urlPath);

         }

         public void loadMusic(  String urlPath){

                    ........

         }

}




猜你喜欢

转载自blog.csdn.net/zuofanxiu/article/details/48517531