Adroid中线程间的通信(一)
来源:互联网 发布:网络公司名称大全 编辑:程序博客网 时间:2024/06/06 15:41
一、Handler处理线程间通信
Handler主要有两个用途:
1) schedule messages and runnables to be executed as some point in the future
消息的分发和处理,安排 messages 和 runnables在未来某个时刻被执行;
2)enqueue an action to be performed on a different thread than your own.
队列action在其他线程上被执行;
UI主线程处理来自工作线程的消息:UI 主线程上新建一个Handler hander= new Handler(), 然后在工作线程上执行handler.sendMessage , handler.post 操作。这样在工作线程上启动的动作或发送的消息就会在UI主线程上被处理执行。
反之,也一样,工作线程创建的hander也可以处理来自UI主线程发送来的message消息。
二、AsyncTask异步任务
这可能是最好的办法,简单!继承AsyncTask,简化了与UI线程交互的工作线程任务的执行。它在工作线程执行耗时操作,而在UI线程发布执行结果。
public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png");}private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { /** The system calls this to perform work in a worker thread and * delivers it the parameters given to AsyncTask.execute() */ protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } /** The system calls this to perform work in the UI thread and delivers * the result from doInBackground() */ protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); }}
- 方法
doInBackground()
在工作线程中自动执行; onPreExecute()
,onPostExecute()
, 和onProgressUpdate()
在UI线程中执行。-
doInBackground()方法返回值被送往
onPostExecute()。
你可以在任何时间在
doInBackground()
方法中调用publishProgress()方法,以在UI线程中执行onProgressUpdate()
方法。- 你可以在任何线程,在任何时间取消异步任务。
三、工作线程上发送Runnable到UI主线程上执行,还有如下几种方式:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
调用 View.post(Runnable)
方法的代码实例如下:
public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png"); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(bitmap); } }); } }).start();}
0 0
- Adroid中线程间的通信(一)
- Adroid笔记(一)
- 线程间通信(一)
- adroid线程池的运用
- 线程通信(一)
- Java 多线程(一)线程间的通信
- Adroid Studio基于TCP协议的通信
- Android线程间通信(一):Message
- Java中线程间的通信(synchronized,wait,notify)
- Android中线程间的通信
- java中线程间的通信
- Android线程间通信一
- Android线程间通信一
- VC中利用多线程技术实现线程之间的通信(一)---理解线程
- Java中线程的通信
- Java中线程的通信
- 线程间的通信
- 线程间的通信
- Java中将数组转化为List
- libpcap的一些主要函数和结构介绍
- FIX POSTFIX "FATAL: OPEN DATABASE /ETC/ALIASES.DB: NO SUCH FILE OR DIRECTORY" ERROR
- Ubuntu 16上装完nodejs还是找不到node命令?
- eclipse 卸载插件
- Adroid中线程间的通信(一)
- 安卓 关于《贪吃蛇大作战》蛇头方向的判断与实现
- 多进程下的文件描述符
- Android 蓝牙自动打开并扫描设备,以及获取对方蓝牙设备的种类
- 微信小程序教程(第四篇)
- Linux中普通进程、后台进程和守护进程
- 微信js分享
- gtest 中Setup TearDown SetUpTestCase和TearDownTestCase 的区别
- 配置spring和sprinMVC框架