• Android Handler研究(1)


    1.   解决问题 

         跨线程通信问题(子线程执行耗时操作)
    2.  原理

         遍历消息队列(Handler Looper MessageQueue Message),其他线程填充消息队列.
    3.  注意点
      a. UI线程在ActivityThread自动初始化Looper.
      b. 任意线程实现消息队列

     1                      new Thread(){
     2 
     3                       run(){
     4                         //1. 准备Looper对象
     5                         Looper.prepare();
     6                         //2. 子线程创建Handler
     7                         handler = new Handler(){
     8                             handlerMessage(){
     9                             }
    10                         }
    11                         //3. 轮询方法 
    12                         Lopper.loop();
    13                       }
    14 
    15                      }.start();

      c. 为什么主线程不会因为Looper.loop()死循环卡死?
      利用Linux管道(Pipe/epoll),简单说就是在主线程的MessageQueue没有消息时,便阻塞在loop的messageQueue.next()中的nativePollOnce()方法里.
      所以说,主线程大多数时候处于休眠状态,不会消耗大量cpu资源
      d. 内存泄漏怎么处理?
      PS:在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用,静态的内部类不会持有外部类的引用。
          

     1                       static class MyHandler extends Handler
     2                       {
     3                           WeakReference<Activity> mWeakReference;
     4                           public MyHandler(Activity activity) 
     5                           {
     6                               mWeakReference=new WeakReference<Activity>(activity);
     7                           }
     8                           @Override
     9                           public void handleMessage(Message msg)
    10                           {
    11                               final Activity activity=mWeakReference.get();
    12                               if(activity!=null)
    13                               {
    14                                   if (msg.what == 1)
    15                                   {
    16                                       noteBookAdapter.notifyDataSetChanged();
    17                                   }
    18                               }
    19                           }
    20                       }
    齊帥
  • 相关阅读:
    SDUT 1570 C 旅行(DFS)
    SDUT 1269 走迷宫(BFS)
    求连通分量个数
    Codeforces Round #237 (Div. 2)
    FZU 2150 Fire Game(BFS)
    HDU 2045 不容易系列之(3)—— LELE的RPG难题(递推)
    LeetCode 155. Min Stack
    【ZZ】终于有人把云计算、大数据和人工智能讲明白了!
    学习笔记之Microsoft Office 365
    【ZZ】技能表合集
  • 原文地址:https://www.cnblogs.com/qishuai/p/7735486.html
Copyright © 2020-2023  润新知