FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

AndroidProjects/HandlerCourse at master · why168/AndroidProjects · GitHub

Latest commit

 

History

History

README.md

8.HandlerCourse

介绍

主要接受子线程发送的数据, 并用此数据配合主线程更新UI。
代码看会理解到,Handler差不多了。
Handler的创建、发送、处理消息都要在Looper.prepare()、Looper.loop()之间。
一个Looper维护一个消息队列,不同的Looper之间的消息队列各自独立,不会影响。

参考资料

示例代码

非UI线程更新UI的4种方式来了!
handler.sendEmptyMessage(1);
handler.post(new Runnable() {
            @Override
            public void run() {
                textView.setText("update ui");
            }
        });
runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText("update ui");
            }
        });
textView.post(new Runnable() {
            @Override
            public void run() {
                textView.setText("update ui");
            }
        });
HandlerThread来了!
private HandlerThread thread;


thread = new HandlerThread("Handler Thread") {
    @Override
    protected void onLooperPrepared() {
        super.onLooperPrepared();
        //TODO 子线程操作
        textView.setText("onLooperPrepared");
    }
};
thread.start();

handler = new MyHandler(thread.getLooper(), XActivity.this);
handler.sendEmptyMessage(1);
Handler弱引用来了!
static class MyHandler extends Handler {
        WeakReference<XActivity> weakReference;

        public MyHandler(XActivity activity) {
            this.weakReference = new WeakReference<XActivity>(activity);
        }

        public MyHandler(Looper looper, XActivity activity) {
            super(looper);
            this.weakReference = new WeakReference<XActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            XActivity XActivity = weakReference.get();
            if (XActivity != null) {
                //TODO 
            }
        }
    }

Back | FazBrowse Home | New Git URL