面试题Android中高级进阶android

Handler都搞不懂,有什么勇气去跳槽?

2019-03-18  本文已影响74人  Sincerity_

1:谈谈handler,Loop ,Messag三者

2:Messagequeue 的数据结构是什么?为什么要用这个数据结构?

MessageQueue内部数据结构不是队列,是一个单链表的数据结构,这样的数据结构对于内部的删除和插入有优势

3: 如何在子线程中创建 Handler?

 class LooperThread extends Thread {
        public Handler mHandler;
  
        public void run() {
            Looper.prepare();
  
            mHandler = new Handler() {
                public void handleMessage(Messemsg) {
                    // process incoming messages here
                }
            };
 
           Looper.loop();
        }
    }

4 Handler post 方法原理?

Handler.post(Rnnnable);

new Thread(new Runnable() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        // 在这里进行UI操作
                    }
                });
            }
        }).start();

5:Loop.loop是一个死循环为什么不会ANR异常呢?

 while (true) {
       //取出消息队列的消息,可能会阻塞
       Message msg = queue.next(); // might block
       ...
       //解析消息,分发消息
       msg.target.dispatchMessage(msg);
       ...
       }

6 使用handler中的内存泄露

static class MyHandler extends Handler
   {
       WeakReference<Activity> mWeakReference;
       public MyHandler(Activity activity) 
       {
           mWeakReference=new WeakReference<Activity>(activity);
       }
       @Override
       public void handleMessage(Message msg)
       {
           final Activity activity=mWeakReference.get();
           if(activity!=null)
           {
               if (msg.what == 1)
               {
                   //....to do somethings
               }
           }
       }
   }

如想阅读Handler源码相关请阅读郭神相关分析

鼓励大家多学习, 多看书. 希望老了以后无悔.--Sincerity

上一篇 下一篇

猜你喜欢

热点阅读