android之旅17 四大组件之服务基本概念

来源:互联网 发布:薛之谦淘宝衣服贵吗 编辑:程序博客网 时间:2024/06/06 03:02
  • 服务可以理解为没有界面的Activity,用法也很像
  • 试用适合在后台运行的代码,比如下载和播放音乐等
  • 之前的下载代码放在Activity其实也是可以的,因为无论按返回键还是HOME键(区别是Activity会不会调用destroy方法),进程还是在的;但内存不足的时候,Activity进程会被杀死,导致后台下载任务无法执行,这也是服务的价值所在
  • 进程优先级:Empty process(没有Activity,比如APP启动后按了返回键onDestroy) < background process(有Activity但不可见,比如APP启动后按了HOME键 onStop) < Service process(startService启动服务,一旦内存又有空闲还会重启)
<application>    <service        android:name="packageName.MyService"> -- 显式配置    <service></application>
public class MyService extends Service{    ....}//系统自动杀死的服务会自动重启,但用户手动的不会public void click(View v){//显式启动服务    Intent intent = new Intent(this, MyService.class);    startService(intent);//开启服务    stopService(intent);//关闭服务,程序关闭的服务不会自己重启}
  • 服务生命周期方法
  • onStartCommand,老版本叫onStart,但已经废弃了,事实上内部还是调用onStart方法,在onCreate之后调用,每次尝试启动服务(startService方法调用)都会调用
  • onCreate创建服务的时候调用,只会调用一次,服务启动会就不会调用,因此系统内部服务同一个服务只会创建一次
  • onDestroy服务销毁的时候调用

电话录音机

  • 电话状态机:空闲状态、响铃状态、摘机状态
  • 注意权限
  • 模拟器可能会有bug,前面录不到,真机没这个问题不用管
public class RecorderService extends Service{    public void onCreate(){        super.onCreate();        TelephonyManager tm = getSystemService(TELEPHONY_SERVICE);        // 枚举确定监听哪个状态,在MyListener里面就复写哪个函数        tm.listen(newMyListener(),                   PhoneStateListener.LISTEN_CALL_STATE);    }}public MyListener extends PhoneStateListener{    public void onCallStateChanged(int state, String incoming){        super.onCallStateChanged(state, incoming);        switch(state){            case  TelephonyManager.CALL_STATE_IDLE:            case  TelephonyManager.CALL_STATE_RING:            //录音逻辑。。。谷歌给了例子,照抄就可以。见下图            break;            case  TelephonyManager.CALL_STATE_OFFHOOK:        }    }}

这里写图片描述

0 0