服务:Service

window下的服务:没有界面的长时间运行在后台的程序

android:跟window差不多,是应用程序的一个组件,没有界面的长时间运行在后台activity


进程和应用程序:进程是应用程序运行的载体

>Linux创建一个进程pid,进程负责运行dvm,

>android应用程序的Java代码是运行在DVM虚拟机里的,

应用程序的概念(application):四大组件的合集即四大组件放在一起就是一个应用程序

一个应用程序可能对应多个进程原因是一个任务栈可以放别的应用程序的activity,如你的应用打开了浏览器界面,这个界面其实是在你的任务栈里的。

应用程序的退出:应用程序任务栈清空了,就代表程序退出了

程序退出,操作系统会保留应用程序的进程


进程的生命周期,android系统会尽量长时间保留每个开启的进程,目的是为了下次启动应用的时候速度的提高

缺陷是最终内存不足,解决方案是给进程按照优先级排序,如果内存不足就回收进程

进程的优先级:

foreground process前台进程(一个应用程序用户正在操作,activity的onresume的方法被执行,用户可以获取焦点响应点击事件)、

visible process可见进程(应用程序的ui界面用户还可以看到,但不能操作了)、

service process服务进程(应用程序没有界面,但有个后台服务还处于运行状态)、

background process后台进程(应用程序没有服务处于运行状态并应用最小化了,activity执行了onstop方法了)、

empty process空进程(没有任何组件运行,所以activity都关闭了,任务栈清空了)


案例:电话窃听

service和activity有共同的父类

生命周期:oncreate  onstartCommand   onstart (过时了)  ondestroy

服务不手工停止是不会自己停止的,所以服务是长时间运行在后台的

如果服务在运行,服务进程被杀掉过一会进程会起来

没有界面(没有onresume onpause onstop)

telephonyManager = getsystemservice(telephony_service);
telephonymanager.listen(listener,phone_call_state);
listener = new phonestatelistener{
  oncallstatechanged(int state,string incomingnumber){
       swich(state){
          telephonymanager.call_state_idle://空闲 挂断
         telephonymanager.call_state_offhook://接通
         telephonymanager.call_state_ringing://来电
       }
    }
}