一畔塔、簡介:
說說主線程向子線程發(fā)送消息怜瞒,如果handler是在主線程中創(chuàng)建,那沒什么好說的止潮,主線程會自動創(chuàng)建Looper和MessageQueen窃判,但是子線程卻不會創(chuàng)建了,不多說喇闸,直接上代碼
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int SEND_MESSAGE = 10;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new MyRunnable()).start();
findViewById(R.id.send_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Message msg = Message.obtain();
msg.what = SEND_MESSAGE;
msg.obj = "主線程向子線程發(fā)送新的消息啦";
mHandler.sendMessage(msg);
}
});
}
private class MyRunnable implements Runnable {
@Override
public void run() {
//建立消息循環(huán)的步驟
Looper.prepare();//1袄琳、初始化Looper
mHandler = new Handler() {//2、綁定handler到CustomThread實例的Looper對象
public void handleMessage(Message msg) {//3燃乍、定義處理消息的方法
if (msg.what == SEND_MESSAGE) {
Log.i(TAG, "handleMessage:---->" + msg.obj);
}
}
};
Looper.loop();//4唆樊、啟動消息循環(huán)
}
}
}