Android -- service 服务的创建与使用,生命周期
1.为什么使用service
应用程序:一组组件(activityserviceproviderreceiver)的集合.
一般情况一个应用程序会对应一个进程.
一般情况关闭掉应用,(关闭掉所有的界面,关闭所有的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注册服务及权限获取
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.itheima.callstatuslintener"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.itheima.callstatuslintener.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".PhoneStatusService"></service></application></manifest>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。