Android多线程,异步消息处理机制, Thread, AsyncTask 简单总结

来源:互联网 发布:unity3d demo 编辑:程序博客网 时间:2024/04/20 01:45

今天看到了Android 多线程,以及异步消息处理机制,这里做一下简单的总结。


一、Android多线程的基本用法--Thread类

这里有两种方法.:
方法一:  新建一个类,继承自 Thread
    class mythread extends Thread {        @Override        public void run() {            while (true) {                Log.e("TTTTTTTTTTT", System.currentTimeMillis() + "");                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }

开始这个线程: new mythread().start()

方法二: 实现Runable接口
    class mythread implements Runnable {        @Override        public void run() {            while (true) {                Log.e("ttttttttttttt", System.currentTimeMillis() + "");            }        }    }

开始这个线程:new Thread(new mythread()).start()

二、Android 异步消息处理机制 Handler, Message

Android的UI 操作只能在主线程里操作, 举个简单的例子,如果你想在子线程里面TextView.setText(), 应用肯定会报错的。如何处理? 这里引出了handler机制。

简单流程:
1.  子线程里进行逻辑运算,然后创建一个Message 对象, 给message.what 复制,调用handler.sendMessage()方法。
Message message = new Message();
message.what = 1
handler.sendMessage();
2. handler 处理Message, 因为hander 是在主线程里运行,这里就可以更新UI了,例如setText()
    Handler handler = new Handler(new Handler.Callback(){        @Override        public boolean handleMessage(Message msg) {            if (msg.what == 1) {                tvDisplay.setText("Good good play, Hard hard study");            }            return true;        }    });
  class mythread extends Thread {        @Override        public void run() {            Message message = new Message();            message.what = 1;            handler.sendMessage(message);        }    }

比如用button来激活这个线程
    public void onClick(View v) {           new mythread().start();    }   

三、 使用AsyncTask 处理异步消息

如何需要更新UI, 在doInBackground(){...} 方法中 publishProgress(), 在onProgressUpate()中更新UI。

public class DemoAsyncTask extends AppCompatActivity {    TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_demo_async_task);        Button btcClick = (Button) findViewById(R.id.btnClick);        tv = (TextView) findViewById(R.id.tv);        btcClick.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new update().execute();            }        });    }    class update extends AsyncTask<Void, Void,Boolean> {                @Override        protected Boolean doInBackground(Void... params) {            publishProgress();            return null;        }        @Override        protected void onProgressUpdate(Void... values) {            super.onProgressUpdate(values);            tv.setText("Nice to meet you ");        }    }}






0 0
原创粉丝点击