一:进程
<activity
...
android:process=""
...>
</activity>
<service
...
android:process=""
...>
</service>
<receiver
...
android:process=""
...>
</receiver>
1. 前端进程(foreground process):一个当前正在被操作的进程
*一个activity用户正在交互(在调用onResume方法后)
*service绑定在一个用户正在交互的activity
*service正在运行在前端,服务调用了startForeground()。
*service正在执行一个生命周期(onCreate(),onStart(),onDestroy())
*broadcast Receiver执行onRecive()方法。
一般,只有一个几个前台的工作。他们被杀死只能作为最后的手段,假如内存低到他们不能继续运行。一般设备已经达到了内存分页状态,以至于去杀掉前端的进程保持用户界面响应。
2. 可见进程(visible process):一个进程没有任何的前端组件,但是他仍然影响用户看到的
*一个activity不是在前端,但是仍然可见,当这个时候,举个例子假如前端开启一个dialog,activity就会在背后。
*一个service绑定一个可见的activity。
一个可见的进程可以认为非常的重要并且不会被杀死保证全部前端进程正在运行时。
3. 服务进程(service process):一个正在运行的service
一个进程是一个服务被startService()方法启动并且不在两个更高的类。虽然服务进程不是直接的被用户看到,他们会做一下事用户会感觉到(比如播放音乐在后台或者从网络中下载数据),所以系统需要保持运行除非他们没有足够的内存当前端和可见进程。
4. 后台进程(background process):一个不可见的activity
一个进程持有一个activity当前不可见对用于(onStop方法之后),这些进程会不影响用户的体验。通常这些许多后台进程运行,他们会保持一个LRU队列来确定一个activity最少最近时候的被杀掉。假如一个activity实现了生命周期方法保存当前的状态杀掉进程后不会影响用户体验,因为当用户返回activity时activity已经存储了可见的状态。
5. 空进程(empty process):没有任何组件的进程
一个进程不激活任何一个应用的组件。这个唯一的理由保证这个进程活着是为了缓存目的,提高启动时间在下次运行的时候。这个系统会进程杀死这些进程为平衡这个系统的资源在进程缓存和内涵缓存。
二:线程
1. Activity.runOnUiThread(Runable);
2. View.post(Runable)
3. View.post(Runable,long)
4. 通过Handler和Message的方式