Android的Service组件
引言
Android的四大组件
1.Activity(活动)
2.Servise(服务)
3.content provider(内容提供者)
4.broadcastReceiver(广播接收者)
这次主要说的是Service:
在Android的系统中,通常只允许一个应用呈现用户界面并处于活动状态,其他的应用则处于非活动状态.而有时有需要某些应用即使没有界面,也可以在后台长期运行,比如音乐的播放,需要使用Service组件实现此功能.
Service
1.Service是一个没有用户界面,且在后台运行的应用组件.
2.其他的应用组件能够启动Service.
3.即使用户切换到了其他的应用程序,Service仍能继续在后台运行.
4.一个组件能够绑定到一个Service并与之交互.
5.服务是不能自己启动的
6.切记,Android的四大组件的使用都必须在清单文件中进行注册
7.写的服务类需要继承于Service
8.Service是运行在后台具有生命周期的组件.
开启Service的两大方式
1.开启Service的两大方式:
startService和bindService都能够开启Service,两者的区别是
startService开启的服务,不能与启动服务者进行通讯和数据交互
bindService开启的服务可以与服务启动者通讯和数据交互
Service的生命周期
startService开启的服务的生命周期:
1)oncreate()
2)onStartCommant()
3)onDestroy()
bindService开启服务的生命周期:
1)oncreate()
2)onBind()
3)onUnbind()
4)onDestroy()
用startService开启的Service的使用步骤
自己创建的类MyStartService继承于Service
1.在MainActivity类中开启服务
Intent intent=new Intent(this,MyStartService.class);
startService(intent);
2.停止服务
startService开启的服务会一直在后台运行,为了节省资源,在不使用的时候一定要将其停止.
Intent intent=new Intent(this,MyStartService.class);
stopService(intent);
重要的就是这两个方法,其余的操作就是在服务中想做什么自己写就OK了.
用bindService开启的Service的使用步骤
1.通过bindService开启的服务是可以和服务开启者进行通讯,用的比较多.
2.通过bindService启动的服务处于"绑定"的状态
3.一个绑定的Service提供一个允许组件与Service交互的接口,可以发送请求,获取返回结果,还可以实现进程间通信交互.
4.绑定的Service,只有当应用组件绑定后才能运行,多个组件可以绑定同一个Service,当所有与之绑定的组件都调用unbind()方法之后,这个Service就会自动被销毁了.
自己创建的类MyBindService继承于Service
1.为了使Service支持绑定,必须在MyBindService中重载方法onbind()
MainActivity类
绑定服务:
Intent intent=new Intent(this,MyBindService.class);
ServiceConnection serviceConnection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//这个方法就是和服务进行数据交互的接口,服务类传过来的数据都在IBinder service参数身上
}
@Override
public void onServiceDisconnected(ComponentName name) {}
};
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
}
解绑服务:
private void unBind() {
//这儿的serviceConnection就是上面创建的ServiceConnection类的对象
unbindService(serviceConnection);
}
MyBindService 类继承于Service
@Override
public IBinder onBind(Intent intent) {
return new MyBind();
}
public class MyBind extends Binder {
public MyBindService getService(){
return MyBindService.this;
}
}
onBind方法使必须重载的,它返回的数据类型是IBinder,所以我们需要创建一个IBinder类的对象作为返回值.
我们可以写一个内部类,继承于Binder类,Binder 类是IBinder的子类,写一个方法让其返回MyBindService 类的对象,这个对象是IBinder子类的对象,具有IBinder类的特征可以作为onBind的返回值.
那么MyBindService 类的对象就传到了MainActivity类中的onServiceConnected(ComponentName name, IBinder service)方法的service,我们得到MyBindService 类的对象就可以调用里面的成员,进行数据的交互.
以上仅供参考,如有错误,希望大家给予指正 😃