zoukankan      html  css  js  c++  java
  • Android之Processes and Threads

    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字)

  • 相关阅读:
    R语言高级编程系列之面向对象的类型系统--S3对象
    数据挖掘之KNN算法(C#实现)
    数据挖掘之决策树ID3算法(C#实现)
    C#矩阵运算类库
    2020年图机器学习的最新趋势
    ios开发笔记-7-bug解决
    ios开发笔记-6-ReactiveCocoa
    ios开发笔记-5-配置文件
    ios开发笔记-4-app打包测试流程
    ios开发笔记-3-微信支付
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2076236.html
Copyright © 2011-2022 走看看