1.同一应用程序中的serice和activity都是在同一进程中。
2.退出应用(进程)需要调用System.exit(0),其余时候都是在内存不足时才会去释放进程所占用的内存空间,这样的设计初衷是为了让app再次打开时更快速。。Android程序退出后不会真正回收,只要当系统资源不足时 进程才会被回收,如果一个app没有service,那他在退出的时候就成了一个空壳的进程 这个进程里面什么内容都没有,除了一些静态变量。(service存在的意义)
3.onDestory()只是关闭当前activity,并不是关闭进程。 (7个生命周期函数只是针对Activity,不要搞混)
4.service不但属于本进程,而且属于本进程的主线程。
5.同一个进程内的activity和service属于进程内部通信。。不同进程属于跨进程通信。 都用aidl。
Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
1.前台进程( FOREGROUND_APP)
2.可视进程(VISIBLE_APP )
3. 次要服务进程(SECONDARY_SERVER )
4.后台进程 (HIDDEN_APP)
5.内容供应节点(CONTENT_PROVIDER)
6.空进程(EMPTY_APP)
特征:
1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程.
2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高.例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要.
3.系统中的phone服务被划分到前台进程而不是次要服务进程.
完全让进程不被kill是不可能的,我们可以通过一些操作, 使进程被kill的几率变小:
1.提高进程的优先级:
后台操作采用Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高。
2.按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).
3.依赖于其他优先级高的进程.
1.使用killProcess (int pid)可以杀死指定PID的进程
public void onClick(View v) {
android.os.Process.killProcess(android.os.Process.myPid());
}
使用System.exit(0);可以达到同样的效果.
2.使用finish()可以杀死当前的activity
1. 保存资料:最好在每次Activity 运行到onPause或
onStop状态时先保存资料,然后在onCreate时将资
料读出来(生命周期方法).
2. OnSaveInstanceState(非生命周期方法)
onRestoreInstanceState