1. 为什么使用service

应用程序 : 一组组件(activity  service provider receiver)的集合.

一般情况 一个应用程序 会对应一个进程.
一般情况 关闭掉应用,  (关闭掉所有的界面 , 关闭所有的activity).
应用程序的进程 是不会被关闭掉的 仍然在后台长期的运行.

采用一组策略 帮助我们自动的管理进程.

进程 按照优先级分为不同的等级:
(1. 前台进程  用户可以看到这个进程里面某一个activity的界面. 可以操作这个界面
(2. 可见进程  用户仍然可以看到这个进程 某个activity的界面 ,但是 不可以操作这个界面
(3. 服务进程  如果一个应用程序 有一个服务在后台运行
(4. 后台进程  没有任何服务的进程 打开一个activity 之后 按了home键 最小化
(5. 空进程    没有任何活动组件 存在的进程.

 

2. 创建和使用service, 示例service×××电话

MainActivity.java , 开启一个service

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//开启服务Intent intent = new Intent(this,PhoneStatusService.class);startService(intent);}}

PhoneStatusService.java ,  服务类继承自 Service

public class PhoneStatusService extends Service {/*** 长期在后台运行的组件,如果用户不手动的关闭 , 不会停止的.*/@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();System.out.println("服务被创建了 ");// 监视用户电话状态的变化...// 电话管理器 电话管理的服务TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);// ×××的通话状态的变化tm.listen(new MyPhoneStatusLinstener(),PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneStatusLinstener extends PhoneStateListener {private MediaRecorder recorder;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state) {case TelephonyManager.CALL_STATE_IDLE: // 空闲状态 ,没有通话 没有响铃if (recorder != null) {recorder.stop();recorder.reset(); // You can reuse the object by going backrecorder.release(); // Now the object cannot be reusedrecorder = null;}break;case TelephonyManager.CALL_STATE_RINGING: // 响铃状态.System.out.println("发现来电号码 :" + incomingNumber);// 1.创建出来一个录音机recorder = new MediaRecorder();// 设置录制的音频源 从话筒里面获取声音recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);recorder.setOutputFile("/sdcard/" + System.currentTimeMillis()+ ".3gp");recorder.prepare();break;case TelephonyManager.CALL_STATE_OFFHOOK: // 通话状态if (recorder != null) {recorder.start(); // Recording is now started}break;}} catch (Exception e) {e.printStackTrace();}super.onCallStateChanged(state, incomingNumber);}}@Overridepublic void onDestroy() {super.onDestroy();System.out.println("服务被销毁了...");}}

AndroidManifest.xml 注册服务及权限获取