Android 消息处理机制——线程通信

来源:互联网 发布:广联达钢筋抽样软件 编辑:程序博客网 时间:2024/05/23 18:59

package com.example.hasee.androidmsg;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Button;import android.view.View;import android.util.Log;import android.os.HandlerThread;public class MainActivity extends Activity {    private Button mButton;    private Thread myThread;    private MyThread myThread2;    private HandlerThread myThread3;    private Handler mHandler;    private Handler mHandler3;    private final String TAG="MessageTest";    private int ButtonCount = 0;    private int mMessageCount = 0;    class MyRunnable implements Runnable {        /* 线程执行主体 */        public void run () {            int count = 0;            for (;;) {                ;            }        }    }    class MyThread extends Thread {        private Looper mLooper;        /* 发送消息者需要知道该线程的Looper */        public Looper getmLooper(){            if (!isAlive()) {                return null;            }            // If the thread has been started, wait until the looper has been created.            synchronized (this) {                while (isAlive() && mLooper == null) {                    try {                        wait();                    } catch (InterruptedException e) {                    }                }            }            return mLooper;        }        @Override        public void run() {            super.run();            Looper.prepare();//创建消息队列            synchronized (this) {                mLooper = Looper.myLooper();                notifyAll();            }            Looper.loop();//启动消息循环        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButton = (Button) findViewById(R.id.button);        mButton.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                // Perform action on click                Message msg = new Message();                mHandler.sendMessage(msg);                mHandler3.post(new Runnable() {                    @Override                    public void run() {                        Log.d(TAG, "get Message for Thread3 ");                    }                });            }        });        /* 直接使用 Thread 无法实现消息处理,根本原因无法获取looper */        myThread = new Thread(new MyRunnable(), "MessageTestThread");        myThread.start();        /* 实现一个myThread类 */        myThread2 = new MyThread();        myThread2.start();        /* 通过Handler 来发送消息,发送给谁?Looper决定,同时传入回调函数,接收线程用于消息处理 */        mHandler = new Handler(myThread2.getmLooper(), new Handler.Callback() {            @Override            public boolean handleMessage(Message msg) {                Log.d(TAG, "myThread2 ");                return false;            }        });        /* 直接使用 HandlerThread 类 */        myThread3 = new HandlerThread("MessageTestThread3");        myThread3.start();        mHandler3 = new Handler(myThread3.getLooper());    }}


阅读全文
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发可以种植吗 如果是秃顶怎么办 染头发把手指甲染黑了怎么办 怀孕两个月下体流褐色分泌物怎么办 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办 生了孩子头发掉的很厉害怎么办 母乳期头发掉的很厉害怎么办 宝宝吃母乳头发掉的厉害怎么办 头发油腻头皮屑多还掉头发怎么办 头发剪了中分刘海弯了怎么办 头发掉了长出来的头发很细怎么办? 头皮损伤毛囊怎么办还会长头发吗 一岁宝宝头发稀少怎么办能刮光头么 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办 吃热的凉的甜的牙疼怎么办 头发太细了想让头发变粗点怎么办 我的头发又少又很油该怎么办 头发油掉发头顶头发稀疏怎么办 我的头发天生就少又细怎么办 头发越来越少怎么办 用什么好呢 头发油掉头发怎么办吃什么药好 生完孩子三个月掉头发很厉害怎么办 电夹板夹头发现在掉头发怎么办 刚剪完的头发前面短后面长怎么办 头发太多太厚怎么办_百度经验 米诺地尔搽剂喷在头皮上痛怎么办 米诺地尔擦了头皮痒怎么办 头发又细又少一天不洗就油怎么办 头又尖头发又细又少不知怎么办 蘑菇头发型留长尴尬期怎么办 月经期间洗了下头量很少了怎么办 宝宝喝了有沐浴露的洗澡水怎么办