ThreadLocal

ThreadLocal

执行ThreadLocal对象的set(Object obj)
方法,将会向存入一个以当前线程为
键的键值对

执行ThreadLocal对象的get()方法,将
会根据当前线程对象为键,取出与之
对应的值

Handler的post()方法。

// private static Message getPostMessage(Runnable r){
//        Message m = Message.obtain();
//            m.callback = r;
//            return m;
//            }
// 1,该方法完成了两个操作,第一个生成了一个Message对象,第二,将r对象赋值给Message对象的callback属性

//   第一个问题,如何把一个Runnable对象放置在消息队列当中:实际上是生成了一个Message对象,并将r赋值给Message对象的callback属性
//   然后再将Message对象放置在消息队列当中
//   第二个问题,Looper取出了携带r对象的Message对象之后,干了些什么? 取出Message对象之后调用了dispatchMessage方法,然后判断Message的callback属性是否为空,
//    此时的callback属性有值,所以执行了handleCallback(Message msg), 在该方法中执行了msg.callback.run();
public class MainActivity extends Activity {

    private Button button;
    private Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                TestThread tt = new TestThread();
                tt.start();
            }
        });
    }
    
    class TestThread extends Thread {
        @Override
        public void run() {
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    //这里可以写更新UI的代码。
                    String currentThreadName = Thread.currentThread().getName();
                    Log.d("MainActivity", "当前线程的名称————》" + currentThreadName);
                    
                }
            };
            //post(r)方法将应用r对象放置在消息队列当中,Looper对象(MainThread)从消息队列当中取出了r对象
            //我们猜测:取出r对象之后
            //1.Thread t = new Thread(r);
            //2.t.start();
            //根据测试的结果可以看出,该思路是错误的
            //我们的问题是Looper取出了r对象之后,干了些什么?
            handler.post(r);
        }
    }
}
原文地址:https://www.cnblogs.com/wuyong0818/p/4803904.html