前三周android预研中,把可能用到的技术点都识别了,并完成了一个DEMO。之后一直在等UCD的同事把应用界面设计出来。。等待过程中有点无聊,就把android in action看完了,UCD的设计结果还是没出来,于是继续看google的android文档。刚才看到process and thread这节,总结整理一下

通过在manifest中配置,是可以改变android系统的默认行为的,不过好像没想到有什么场景需要这样做,所以这篇博客只总结默认配置下的情况

1. 一个application对应一个process

2. 所有的component(包括activity,service)都跑在同一个thread中,这个thread是main线程,也叫UI thread。也就是如果应用不做额外的编码,所有的组件都跑在同一个线程中。。

3. android还是比较好心的,it tries to maintain an application process for as long as possible

4. 但在资源不够的情况下,android系统就开始kill process了。优先级包括,foreground process、visible process、service process、background process、empty process。从后往前依次kill

5. 进程之间有依赖关系的话,process that is serving another process can never be ranked lower than the process it is serving

6. 由于前面2提到的,默认所有组件都跑在UI thread里,页面UI响应会很不好,所以要编码解决这个问题。需要遵循2条规则:
A. 不能阻塞UI thread
B. 不要在UI thread之外访问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();}

上面的代码就违反了规则2,在worker thread中访问了UI组件mImageView
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来进一步优化
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);    }}

更多相关文章

  1. 常用组件:android的图片组件ImageView
  2. Android Activity的setTitle,AlertDialog,Toast操作是否都必须在
  3. Android的进程和线程
  4. Android 四大组件之Activity 基础总结(1)
  5. 简单解释Android中的任务、进程和线程
  6. Android Handler机制详解:在线程中新建Handler
  7. 【译】Google官方推出的Android架构组件系列文章(六)Room持久化库
  8. [转] 有关Android线程的学习
  9. android 在android中教你一行代码判断是不是主线程

随机推荐

  1. 随机生成八位优惠码并保存至Mysql数据库
  2. 深入了解SQL注入
  3. MySQL复制优点、原理详解
  4. window环境配置Mysql 5.7.21 windowx64.z
  5. MySql5.7.21安装要点记录笔记
  6. mysql 5.7.21解压版本安装 Navicat数据库
  7. windows 10下mysql 5.7.21 winx64安装配
  8. win10下mysql5.7.21解压版安装教程
  9. Windows下mysql5.7.21安装详细教程
  10. mysql中datetime类型设置默认值方法