http://blog.csdn.net/crystal923129/article/details/6739575


方法一:使用android提供的方法

  • Activity.runOnUiThread(Runnable)
  • View.post(Runnable)
  • View.postDelayed(Runnable, long)
举例: 在work thread中更新UI mImageView,调用mImageView的post方法,这个方法将在main线程中执行
[java]  view plain copy
  1. public void onClick(View v) {  
  2.     new Thread(new Runnable() {  
  3.         public void run() {  
  4.             final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");  
  5.             mImageView.post(new Runnable(){  
  6.                 public void run() {  
  7.                    mImageView.setImageBitmap(bitmap);  
  8.                 }  
  9.             });  
  10.         }  
  11.     }).start();  
  12. }  

方法二:使用AsyncTask
需要实现的方法

 doInBackground() :运行在后台线程池中
 onPostExecute()  : 运行在main线程中,传递 doInBackground()执行的结果
 onPreExecute()    : 运行在main线程中
 onProgressUpdate(): 运行在main线程中
其它protected方法:
 publishProgress()  : 可以在 doInBackground()中随时调用,用于触发onProgressUpdate()的执行
公共方法:
execute():执行该task
cancle() :随时取消该task,可以在任何线程中调用

 

举例:
[java]  view plain copy
  1. public void onClick(View v) {  
  2.     new DownloadImageTask().execute("http://example.com/image.png");  
  3. }  
  4. private class DownloadImageTask extends AsyncTask {  
  5.      
  6. protected Bitmap doInBackground(String... urls) {  
  7.         return loadImageFromNetwork(urls[0]);  
  8.     }  
  9.      
  10.     protected void onPostExecute(Bitmap result) {  
  11.         mImageView.setImageBitmap(result);  
  12.     }  
  13. }  

方法三:使用Handler 和Thread实现
Thread中需要更新UI的部分,向main thread中的handler发送消息sendMessage/postMessage,传递更新所需要的参数,handler重写handleMessage方法处理消息 ,更新UI
举例:
[java]  view plain copy
  1. Handler myHandler = new Handler() {  
  2.   public void handleMessage(Message msg) {  
  3.     switch (msg.what) {  
  4.        case TestHandler.GUIUPDATEIDENTIFIER: mImageView.invalidate();  
  5.               break;  
  6.     }  
  7.     super.handleMessage(msg);  
  8.   }  
  9. };  
  10.    
  11. class myThread implements Runnable {  
  12.  public void run() {  
  13.   while(!Thread.currentThread().isInterrupted()) {  
  14.    Message message = new Message();  
  15.    message.what = TestHandler.GUIUPDATEIDENTIFIER;         
  16.    TestHandler.this.myHandler.sendMessage(message);  
  17.    try {Thread.sleep(100); }  
  18.    catch(InterruptedException e)  
  19.    { Thread.currentThread().interrupt(); }  
  20.   }  
  21.  }   

更多相关文章

  1. Android中的ClassLoader
  2. android View的点击事件分发机制的简单认知
  3. butterknife使用方法
  4. Android(安卓)之 WebView的使用介绍
  5. Android(安卓)的网络编程(4)-HttpClient接口
  6. Android入门进阶教程(20)-ContentProvider 数据共享
  7. android中子线程更新UI的方式浅析
  8. ServiceManager & SystemService
  9. Android打开MyEclipse报错:发现了以元素 'd:skin' 开头的无效内容

随机推荐

  1. 大数据成神之路-Java高级特性增强(锁)
  2. nginx搭建web服务器,配置端口复用
  3. Python 爬虫进阶必备 | 某壁纸网站请求头
  4. Dnsmasq安装后不能启动
  5. Python 爬虫进阶必备 | 某k12注册加密参
  6. 理财实战之基金定投(三)
  7. Python 爬虫进阶必备 | 某爬虫练习站之 j
  8. 理财实战之基金定投(二)
  9. Prometheus 之 Grafana介绍及安装
  10. 理财实战之基金定投(一)