Service

服务

四大组件之一 没有界面,运行在后台

要素:

1、继承Service

2、在清单文件里面注册

<name = 包名 + 类名>

生命周期:

打开服务:

startService(Intent intent)

生命周期:

onCreat() onStartConmmand()

关闭服务:

stopService(Intent intent);

注意:1、通过startService打开的服务跟Activity之间的联系比较松散(activity关闭服务不会死掉)

2、Service打开之后继续调用startService只会调用 onStartConmmand()

3、通过startService打开的Service只能通过stopservice关闭

ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

//绑定异常调用

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

//绑定成功,并返回一个非空的Ibinder类型对象时调用

}

};

绑定服务

绑定服务的时候,界面关闭掉,服务随之关闭。绑定成功的时候可以得到服务返回的数据。

Intent service = new Intent(this, MyService.class);

//绑定服务

bindService(service , conn, Context.BIND_AUTO_CREATE);

//Context.BIND_AUTO_CREATE 当服务不存在,默认去创建服务

解除绑定:

unbindService(conn);

绑定Service获取服务返回的消息

1、绑定成功

onBinder()会返回IBinder类型的对象

2、声明一个类去接触Binder(implement IBinder)

3、在声明的类中声明一个方法

4、在onBinder返回声明的类的对象

5、在Activity中的ServiceConnection类型的对象中的onServiceConnected()中接收返回的对象



starService + binderService

广播接受者

BroadcastReceiver

广播机制

单向,群发。

创建:

1、继承BroadcastReceiver

2、在清单文件中注册



注册:

1、清单文件中注册

2、代码中注册



例子:

接收短信

1、权限:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

2、设置广播接收者的过滤条件

a、在清单文件中注册

<intent-filter >

<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>


b、在代码中注册

receiver = new MyReceiver();

IntentFilter filter = new IntentFilter();

filter.addAction("android.provider.Telephony.SMS_RECEIVED");

/ /注册广播接受者

registerReceiver(receiver , filter );

//注销广播接收者

unregisterReceiver(receiver);


清单文件中注册与代码中注册的区别

1、清单文件中注册 进程不存在 只要过滤条件匹配就能接收广播

2、代码中注册 使用灵活 进程不存在则接收不了



应用本身也可以发广播

可以被应用本身的广播接收者接收,也可以被其他应用的广播接收者接收

//发送广播

Intent intent = new Intent();

intent.putExtra("key", "ssssss");

intent.setAction("com.xinbo.mysms");

sendBroadcast(intent );

Intent

1、显式意图 (指定要打开的目标)

2、隐式意图

通过隐式意图打开界面:

1、在清单文件为Activty设置过滤条件

<intent-filter >

<action android:name="com.yinan"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

2、Intent intent = new Intent();

intent.setAction("com.yinan");

startActivity(intent );

1、显式意图 只能打开本应用的界面 只能打开一个

2、隐式意图 可以打开本应用也可以打开其他应用的界面 可以开启多个以供选择