service :一直在后台运行!
创建:
1.创建一个继承service的子类!
2.在Androidmainfest.xml中进行配置!
启动方式(两种):
1.Context.startService(new Intent());
1) 通过该方法启动的service,service与访问者没有关联!即使访问者退出,service仍然可以运行!所以service不能与访问者进行数据交互
停止方法:
Context.stopService(new Intent());
2.Context.bindService(new Intet(),Serviceconnection con,int flags);
con :该对象中有两个方法需要重写
onServiceConnected(ComponentName name,IBinder binder){
// 该方法当访问者与Service绑定成功时回调!onBind()方法中返回的IBinder对象就是binder,这样就实现了service与访问者之间数据的交互!
}
onServiceDisconnected(ComponentName name){
// 该方法当程序异常,或者其他原因导致的访问者与service断开连接回调! 如果是调用unbindService()方法来停止服务 不回调!
}
2) 通过该方法启动的service,service与访问者进行绑定!如果绑定的访问者退出,停止service! 因此可以与访问者进行数据交互!
停止方法:
Context.unbindService(new Intent());
生命周期:
service的生命周期与之启动方式不同而略有不同!
1.使用startService():onCreate() --> onStartconmmand() --> onDestroy()
2.使用bindService() : onCreate() --> onBind() --> onUnbind() --> onDestroy()
onCreate() :第一次创建service时~!执行”一“次!
onStartconmmand(): 每次执行startService()时,回调!
onDestroy(): 执行stopService()方法停止服务时,回调!
onBind() :service子类必须实现的方法!该方法返回一个Ibinder对象!通过该方法程序可以与service进行通信!
onUnbind() :当与该service绑定的客户端都断开连接时回调!
IntentService :
IntentService不是普通的Service,他是Service的子类,对Service进行了增强!
Service不足:
1.Service不会单独启用一个线程,他和他的应用在同一个线程中!
2.Service 因为他不是在一条新线程中,所以不能执行耗时任务!
IntentService 与之相反!
继承IntentService的子类重写一个方法即可:
onHandlerIntent(Intent intent){
}