Service的详解

来源:互联网 发布:vivo刷机软件 编辑:程序博客网 时间:2024/06/15 16:09

服务

  • Service
  • 运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity

进程优先级

  1. 前台进程:拥有一个正在与用户交互的Activity(onResume方法被调用)的进程
  2. 可见进程:拥有一个可见但是没有焦点的Activity(onPause方法被调用)
  3. 服务进程:拥有一个通过startService方法启动的服务
  4. 后台进程:拥有一个不可见的Activity(onStop方法被调用)的进程
  5. 空进程:没有拥有任何活动的应用组件的进程

电话录音机

电话的状态
  • 空闲状态
  • 响铃状态
  • 摘机状态
录音机
  • 音频文件的编码和格式不是一一对应的

Service

  • 就是默默运行在后台的组件,可以理解为是没有前台的activity,适合用来运行不需要前台界面的代码
  • 服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启
  • startService启动服务的生命周期
    • onCreate-onStartCommand-onDestroy
  • 重复的调用startService会导致onStartCommand被重复调用

进程优先级

  1. 前台进程:拥有前台activity(onResume方法被调用)
  2. 可见进程:拥有可见activity(onPause方法被调用)
  3. 服务进程:不到万不得已不会被回收,而且即便被回收,内存充足时也会被重启
  4. 后台进程:拥有后台activity(activity的onStop方法被调用了),很容易被回收
  5. 空进程:没有运行任何activity,很容易被回收

电话窃听器

  • 电话状态:空闲、响铃、接听
  • 获取电话管理器,设置侦听

    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
  • 侦听对象的实现

    class MyPhoneStateListener extends PhoneStateListener{    //当电话状态改变时,此方法调用    @Override    public void onCallStateChanged(int state, String incomingNumber) {        // TODO Auto-generated method stub        super.onCallStateChanged(state, incomingNumber);        switch (state) {        case TelephonyManager.CALL_STATE_IDLE://空闲            if(recorder != null){                recorder.stop();                recorder.release();            }            break;        case TelephonyManager.CALL_STATE_OFFHOOK://摘机            if(recorder != null){                recorder.start();            }            break;        case TelephonyManager.CALL_STATE_RINGING://响铃            recorder = new MediaRecorder();            //设置声音来源            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);            //设置音频文件格式            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);            recorder.setOutputFile("sdcard/haha.3gp");            //设置音频文件编码            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);            try {                recorder.prepare();            } catch (IllegalStateException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            break;        }    }}

0 0
原创粉丝点击