Android消息通信机制(主线程发消息到子线程)

来源:互联网 发布:知乎 donna summer 编辑:程序博客网 时间:2024/03/29 07:33

步骤:

public class MainActivity extends AppCompatActivity {    private Button btn_send;    public static final int SENDMSG=1;    private MyThread thread=null;    private MyHandler handler=null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_send= (Button) findViewById(R.id.btn_send);        btn_send.setOnClickListener(new View.OnClickListener() {            //①点击按钮向子线程发送消息            @Override            public void onClick(View v) {                //⑥初始化消息内容                Message message=new Message();                message.what=SENDMSG;                message.obj="acvitity发来消息";                handler.sendMessage(message);            }        });        //④主线程创建时候启动子线程        if(thread==null){            thread=new MyThread();            thread.start();        }    }    /**     * ②创建子线程接收消息     */    class MyThread extends Thread{        //重写run方法        @Override        public void run() {            super.run();            //初始化Looper            Looper.prepare();            //⑤在子线程中实例化MyHandler,处理数据            if(handler==null){                handler=new MyHandler();            }            //启动Looper            Looper.loop();        }    }    /**     * ③创建MyHandler类处理消息     */    class MyHandler extends Handler{        //重写handlerMessage方法        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            //根据处理类型不同对数据做不同的操作            switch (msg.what){                case SENDMSG:                    //因为子线程不能操作主线程,所以只能打印日志查看结果                    Log.i("info",msg.obj.toString());                    break;            }        }    }
0 0