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、隐式意图 可以打开本应用也可以打开其他应用的界面 可以开启多个以供选择