总结

1. 所有的组件都运行在主线程中,包括其生命周期回调函数。

2. 如果在主线程进行长时的网络请求或数据库查询操作,则可能会阻塞主线程出现 "application not responding" (ANR)异常。

3. android的UI套件不是线程安全的,不应在工作线程(或称后台线程)中操作UI, 必须在主线程中操作UI。android单线程模型的规则:1.不阻塞主线程。2. 不在主线程之外的线程中操作UI套件。


实例和解决方案

错误实例代码:

public void onClick(View v) {    new Thread(new Runnable() {        public void run() {            Bitmap b = loadImageFromNetwork("http://example.com/image.png");            mImageView.setImageBitmap(b);        }    }).start();}
解决方案

1. Activity.runOnUiThread(Runnable)
2. View.post(Runnable)
3. 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();}

通过Handler或AsyncTask处理

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);    }}

Handler详解可参考:http://www.cnblogs.com/devinzhang/archive/2011/12/30/2306980.html





更多相关文章

  1. 浅析Android中的消息机制-解决:Only the original thread that cr
  2. Android异步消息机制之Handler
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. Android下Excel的操作
  5. Android之Handler用法总结
  6. Android开发之消息处理机制(一)——Handler
  7. Android异步加载图像小结 (含线程池,缓存方法)
  8. 【Android】文件读写操作(含SDCard的读写)
  9. android 面试题集

随机推荐

  1. Android build/envsetup.sh 脚本分析(lun
  2. Android简单的Button事件处理
  3. android suport respository和Android Su
  4. Android笔记: Android版本号
  5. Beginning Android 4--Exercises 1
  6. Android之打开闪光灯关键代码
  7. 自定义progressbar使用图片
  8. Android 获取剩余存储空间
  9. Android中全屏无标题设置(Android学习随笔
  10. Android性能测试(内存、cpu、fps、流量、G