进程
< activity>, < service>, < receiver>, 和 < provider>都支持android:process属性指定他们在哪个进程运行。
开启多进程
- 一个App里面所有的组件,默认运行在以包名命名的进程中;
- 可以在Application的process标签中配置,其他的进程名;
- process以“:”开头进行配置,则在启动此组件时,会自动创建一个新的进程,而且此进程是这个Application私有的;
- process标签中,没有以“:”开头,这说明此进程是全局进程,其他应用可以通过ShareUID方式共享此进程。
进程生命周期
进程的优先级一共有5级:
前台进程
- 托管用户正在交互的 Activity(已调用 Activity 的 onResume() 方法)
- 托管某个 Service,后者绑定到用户正在交互的 Activity
- 托管正在“前台”运行的 Service(服务已调用 startForeground())
- 托管正执行一个生命周期回调的 Service(onCreate()、onStart() 或onDestroy())
- 托管正执行其 onReceive() 方法的 BroadcastReceiver
可见进程
- 托管不在前台、但仍对用户可见的 Activity(已调用其 onPause() 方法)。例如,如果前台 Activity 启动了一个对话框,允许在其后显示上一 Activity,则有可能会发生这种情况
- 托管绑定到可见(或前台)Activity 的 Service
服务进程
- 正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程
- 后台进程
- 对用户不可见的 Activity 的进程(已调用 Activity 的 onStop() 方法),通常会有很多后台进程在运行,因此它们会保存在 LRU (最近最少使用)列表中
- 空进程
- 不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存
线程
Android 提供了几种途径来从其他线程访问 UI 线程:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)