android创建服务,Android -- service 服务的创建与使用,生命周期

1. 为什么使用service

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

一般情况 一个应用程序 会对应一个进程.

一般情况 关闭掉应用,  (关闭掉所有的界面 , 关闭所有的activity).

应用程序的进程 是不会被关闭掉的 仍然在后台长期的运行.

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

进程 按照优先级分为不同的等级:

(1. 前台进程  用户可以看到这个进程里面某一个activity的界面. 可以操作这个界面

(2. 可见进程  用户仍然可以看到这个进程 某个activity的界面 ,但是 不可以操作这个界面

(3. 服务进程  如果一个应用程序 有一个服务在后台运行

(4. 后台进程  没有任何服务的进程 打开一个activity 之后 按了home键 最小化

(5. 空进程    没有任何活动组件 存在的进程.

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

MainActivity.java , 开启一个servicepublic class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//开启服务

Intent intent = new Intent(this,PhoneStatusService.class);

startService(intent);

}

}

PhoneStatusService.java ,  服务类继承自 Servicepublic class PhoneStatusService extends Service {

/**

* 长期在后台运行的组件,如果用户不手动的关闭 , 不会停止的.

*/

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

@Override

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

@Override

public 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 back

recorder.release(); // Now the object cannot be reused

recorder = 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);

}

}

@Override

public void onDestroy() {

super.onDestroy();

System.out.println("服务被销毁了...");

}

}

AndroidManifest.xml 注册服务及权限获取<?xml version="1.0" encoding="utf-8"?>

package="com.itheima.callstatuslintener"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="17" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.itheima.callstatuslintener.MainActivity"

android:label="@string/app_name" >

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值