android四大组件之service

来源:互联网 发布:安卓全球电视直播软件 编辑:程序博客网 时间:2024/05/20 23:34
Service服务与Activity有些像,就像个没有界面的activity,它也是Context的子类,可以自定义一个类继承Service,
它的生命周期如下:
onCreate():第一次创建调用
onStartCommand(Intent intent,int flags,int startId):通过startService启动时才调用,每次启动都会调用
onDestory():关闭时调用
onBind(Intent intent):与程序通信使用,绑定service只会调用一次
onUnbind(Intent intent):与service绑定的连接全部断开时调用
类似注册activity,我们也要在配置文件中加入<service>标签,其也可以设置intent-filter等,有两种
方法可以启动service:
Context.startService():启动service,但这种启动访问者即使退出该service依然会运行,想终止可调用
stopService(Intent intent)方法,由于访问者与service无关联,所以不能通信或传数据
Context.bindService():绑定service,访问者退出service也会停止,unbindService终止,可以进行通信
bindService(Intent service,ServiceConnection conn,int flags);Intent指定要启动的service,conn
主要用于监听连接情况,当service连接成功会调onServiceConnected(ComponentName name,IBinder service)
方法,这里参数的IBinder对象就是在onBind方法返会的对象,所以想通信就靠它了,当service终止会调onServiceDisconnected(ComponentName name)方法,flags指定绑定时是否自动创建service,0为不自动创建,BIND_AUTO_CREATE为自动创建
所以这两种方式的生命周期大概就是:
startService:onCreate-onStartCommand-onDestory
bindService:onCreate-onBind-onUnbind-onDestory
虽然service看似是独立的,但它并不是一个新的进程或线程,所以我们不能直接在里面进行耗时操作,如果要

执行耗时操作则需要创建一个新线程

IntentService是Service的子类,主要解决了在service中不能直接执行耗时操作的问题,intentService是用
队列来管理intent,它会将intent加入队列并开启新线程,这样不会造成主线程的阻塞。
使用非常简单,直接继承IntentService并重写onHandleIntent方法就可以,无需写onBind和onStartCommand
public class MyService extends IntentService{
@Override
protected void onHandleIntent(Intent intent){
//这里可以直接执行耗时操作
}
}

0 0