Android中Handler的使用,一般都在UI主线程中执行,因此在Handler接收消息后,处理消息时,不能做一些很耗时的操作,否则将出现ANR错误。

Android中专门提供了HandlerThread类,来解决该类问题。HandlerThread类是一个线程专门处理Hanlder的消息,依次从Handler的队列中获取信息,逐个进行处理,保证安全,不会出现混乱引发的异常。HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,它有个Looper成员变量。

HandlerThread thread = newHandlerThread("handler_thread");

    thread.start();

       final Handlerhandler = newHandler(thread.getLooper()){

 

            @Override

            public voidhandleMessage(Message msg) {

                Log.i("TAG", "thecurrent thread is"+Thread.currentThread());

                super.handleMessage(msg);

            }      

       };

       new Thread(newRunnable(){

 

            @Override

            public void run() {

                // TODOAuto-generated method stub

                for(int i = 0;i<10;i++){

                    handler.sendMessage(Message.obtain());

                    try {

                        Thread.sleep(500);

                    }catch(InterruptedException e) {

                        // TODOAuto-generated catch block

                        e.printStackTrace();

                    }

                }

            }

       

       }).start()

注:Handler 与谁相关联不是看声明在什么地方,是看与哪个线程的looper挂钩。默认是主线程的looper.因为主线程中默认就有了looper,消息循环队列。

 

Android SDK中的方法说明:

//用于返回与该线程相关联的Looper对象

publicLooper getLooper ()

//获得该线程的Id

publicint getThreadId ()

//结束当前的Looper 循环。

publicboolean quit ()

//用于looper取出的消息处理

publicvoid run ()


更多相关文章

  1. Android深入浅出之Audio第三部分Audio Policy
  2. Android的UI设计与后台线程交互
  3. Android(安卓)之 Looper Handler Message 之间的关系
  4. Android(安卓)面试大全
  5. Android:异步调用详解
  6. android 事件处理
  7. Android(安卓)面试大全
  8. 在Android中使用Handler和Thread线程执行后台操作
  9. 牛人文章学习

随机推荐

  1. 【Android(安卓)UI】 Shape详解 (Gradien
  2. Android中如何反编译apk文件
  3. Android当中的防锯齿(Bitmap & Canvas )
  4. 实例16--心理测试
  5. 谈Android模拟点击的价值和实现
  6. Android——基于Android Studio开发备忘
  7. Android Basic-xml的数据读取及保存
  8. Android之Adapter(适配器)
  9. 下一代Android或官方支持“App2sd”
  10. android文件系统及其制作