android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
来源:互联网 发布:c语言取反!用法 编辑:程序博客网 时间:2024/05/16 12:32
方法一:使用android提供的方法
方法二:使用AsyncTask
需要实现的方法:
doInBackground() :运行在后台线程池中
onPostExecute() : 运行在main线程中,传递 doInBackground()执行的结果
onPreExecute() : 运行在main线程中
onProgressUpdate(): 运行在main线程中
其它protected方法:
publishProgress() : 可以在 doInBackground()中随时调用,用于触发onProgressUpdate()的执行
公共方法:
execute():执行该task
cancle() :随时取消该task,可以在任何线程中调用
方法三:使用Handler 和Thread实现
Thread中需要更新UI的部分,向main thread中的handler发送消息sendMessage/postMessage,传递更新所需要的参数,handler重写handleMessage方法处理消息 ,更新UI
举例:
- Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable, long)
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();}
方法二:使用AsyncTask
需要实现的方法:
doInBackground() :运行在后台线程池中
onPostExecute() : 运行在main线程中,传递 doInBackground()执行的结果
onPreExecute() : 运行在main线程中
onProgressUpdate(): 运行在main线程中
其它protected方法:
publishProgress() : 可以在 doInBackground()中随时调用,用于触发onProgressUpdate()的执行
公共方法:
execute():执行该task
cancle() :随时取消该task,可以在任何线程中调用
举例:
public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png");}private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); }}
方法三:使用Handler 和Thread实现
Thread中需要更新UI的部分,向main thread中的handler发送消息sendMessage/postMessage,传递更新所需要的参数,handler重写handleMessage方法处理消息 ,更新UI
举例:
Handler myHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case TestHandler.GUIUPDATEIDENTIFIER: mImageView.invalidate(); break; } super.handleMessage(msg); }}; class myThread implements Runnable { public void run() { while(!Thread.currentThread().isInterrupted()) { Message message = new Message(); message.what = TestHandler.GUIUPDATEIDENTIFIER; TestHandler.this.myHandler.sendMessage(message); try {Thread.sleep(100); } catch(InterruptedException e) { Thread.currentThread().interrupt(); } } }
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- Android中常用的handler进行UI更新和Thread代码
- Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新UI
- Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新UI
- Androidの多线程之更新ui(Thread+Handler+Message)
- Android:UI更新方法二:View.postInvalidate+Thread+Runnable
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- Android多线程编程之二:Thread+UI.Post(new Runnable(){})
- [Silverlight] 如何在 Worker thread 中更新 UI
- Android多线程更新UI
- 在Android Studio中进行单元测试和UI测试
- 在Android Studio中进行单元测试和UI测试
- 在Android Studio中进行单元测试和UI测试
- 在Android Studio中进行单元测试和UI测试
- VIM使用系列之一——配置VIM下编程和代码阅读环境
- 管家婆ERP V3Ⅱ销售出库单生成金蝶财务软件K3 V10.3标准凭证引入的SQL select 查询语句
- 拟合
- Fibonacci Heap实现参考
- RHEL42下搭建APACHE+RESIN+MYSQL
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- sharepoint获取当前用户信息
- 轻量级ETL工具
- C# 时间格式化大全
- C++的多态性
- 超级短的挂马代码大全
- 关于索引(内容出自CSDN会员dawugui)
- APNs初体验
- Java内部类 简介