进程
默认情况下,同一个APP的所有组件应该运行在同一个进程下。然而,如果我们有特殊需求的话可以在manifest文件中修改组件运行的进程。
- manifest为四大组件都提供了android:process属性,这个属性指定了某个组件应该在哪个进程上运行。通过设置这个属性我们可以让所有进程运行在同一个进程中或者某些组件在一个进程而其他的在另外一个进程。也可以让不同APP运行在同一个进程中。
- manifest文件的application节点也提供了android:process属性,此时设置的是这个APP的所有组件运行的进程。
- Android会在某些特殊情况下杀死进程,譬如说内存不足的情况下其他直接服务于用户的进程请求内存时。进程被杀死时进程中所有运行的组件也被销毁。当用户再次回到这些组件时会重新启动一个进程。
线程
当一个APP启动时,系统会为APP创建一个执行线程(称为主线程)。这个线程被用来为UI分发事件,包括绘制事件。因此主线程也叫做UI线程。然而,在某些特殊情况下,主线程可能不是UI线程。
系统不会为每一个组件都创建一个单独的线程。所有运行在同一个进程中的组件都在UI线程中实例化,所有的UI操作都在主线程中进行。所以在主线程中不能执行类似网络请求和数据库操作等长时间的操作,否则系统会卡住并且如果卡住超过5秒便会弹出ANR对话框。
因此有两条十分重要的原则:
- 永远不要阻塞UI线程。
- 必须在UI线程中操作View。
网友评论