分享

Android之Processes and Threads

 lifei_szdz 2012-12-24

Processes and Threads

  当一个应用程序组件开始,应用程序没有任何组件在运行,Android系统开启一个新Linux进程为应用程序伴随一个单独的执行线程。默认,所有同一个进程所有组件运行在同一个进程 和线程(称为主线程)。如果一个应用程序组件开启并且已经有一个那个应用中程序的进程(因为另一个这个应用程序的组件存在),那么组件使用同一个线程。可是,你可以安排不同的组件在你的应用程序里运行在不同的进程,并且你可以为任何进程创建线程。

Processes

  默认,同一应用程序的所有组件运行在同一个进程,大多数应用不应当改变这点。可是,如果你发现你需要控制哪一个组件属于哪一个进程,你可以在manifest文件里做。

  每种类型的manifest入口点<activity>、<service>、<receiver>、<provider>--支持一个android:process属性能指定运行进程。你可以调这个属性以便每个组件运行在它自己的进程 或一组组件共享同一个进程而其它的不是。你也可以设置android:process以便不同应用程序的组件运行在同一个进程--前提是两个应用程序共享同一个Linux UID并且使用同样的证书签名。

  <application>元素也支持 android:process属性,来设置适用所有组件的默认值。

  Android可能会在某个点关闭进程 ,当内存少。应用程序组件运行在被杀死的进程里被最终销毁。一个进程被再开启这些组件,当又有工作要他们来做。

  当决定哪个进程被杀死,Android系统衡量。例如,关闭一个拥有不再可见的activity的进程比较容易接受,和拥有可见activity的进程相比。是否删除进程决定于运行于其内的组件。

Process lifecycle

  Android系统尝试尽量维护应用程序进程,但最终需要移除老的进程来为新的和更重要的进程分配内存。

  在重要级别图中共有五个等级。下面按重要程序展现不同类型的进程(第一个进程最重要)

  1、Foreground process

  2、Visible process

  3、Service process

  4、Background process

  5、Empty process

Threads

  当一个应用程序启动,系统创建一个线程执行应用程序,叫做“主线程”。这个线程非常重要,因为它管理事件分发给合适的用户接口widget,包括绘图事件。它也是你的应用程序同Anroid UI 工具包组件交互的线程(从android.widget和android.view包中的组件)。这样,主线程也叫做UI线程。

  系统不创建单独的线程为每个组件。所有组件在同一个进程的组件都是UI线程的实例,系统调用各个组件都是从这个线程分发。结果是,响应系统调用的方法(如onKeyDown()等)都运行在UI线程里。

  Android UI 工具包不是线程安全的,你必须操作你的UI在UI线程。有两条简的规则对Android线程模型:

  1、不要阻塞UI线程

  2、不要在UI线程外操作Android UI工具。

Worker threads

  如果你有非即时的操作,你应该让他们在单独的线程工作(背景线程或工作线程)。

  下面是单击按钮,响应下载事件的事例:

  

  上例违反了第二条规则,在非UI线程中操作UI。

Using AsyncTask

  ……(此处省略250字)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多