美文网首页
Android笔记13:服务

Android笔记13:服务

作者: Rave_Tian | 来源:发表于2017-03-09 14:45 被阅读27次

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;
              }
          }

相关文章

网友评论

      本文标题:Android笔记13:服务

      本文链接:https://www.haomeiwen.com/subject/ftulgttx.html