1.这次来说下绑定服务的声明周期,还是上一篇Demo的代码哦,忘记的话动动手指回去看一下
2.点击BindService按钮,会提示什么啊?
可以看出来,一样要创建Service先,会调用onCreate方法,然后调用onBind的方法...
3.再点击BindService按钮呢?
可以看到,是没有反应的...
4.点击unBindService按钮呢?
可以看出会调用onUnbind先,先取消绑定服务,在调用onDestroy方法...
是不是觉得很好理解啊,还有,怎么中间会输出一行=====OnConnected======信息呢?
这就是我重点说的地方...
当我点击绑定服务的按钮的时候,如果服务被绑定了,会回调Service中的onBind
return的值被谁接收啊?就是说return给谁啊?再看MainActivity中,我重写了ServiceConnection方法..
是的,就是这个方法监听这绑定的状态,如果onBind方法中,你返回一个空值,
那么onServiceConnected方法就不会被触发....
同时你也很好奇,为什么我取消绑定的时候,不会触发onServiceDisconnect函数啊,因为这个函数的触发
是当这个服务遭受到外界的不明因素,比如说360XX强行终止的时候才会触发的,正常取消绑定的时候是
不回触发这个函数..
**那么如果我启动服务后,在绑定服务后会怎么样啊?
下面是我按下启动服务后,在按绑定服务的打印信息
再按取消绑定的时候,
如上图,他只会取消绑定,但是还没有销毁服务,只有你点击停止服务后,他才会销毁掉
下面是点击StopService按钮的提示信息:
那么绑定先,再启动服务,一样道理,不过你先点停止服务的话,会没有反应,只有当你取消绑定的时候才
能停止服务,这里有兴趣的话自己试下吧...
最后一个就是那个Service中的onRebind触发的方式的前提是取消绑定服务的时候要返回true值..
/* (non-Javadoc)
* @see android.app.Service#onUnbind(android.content.Intent)
*/
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Log.e("Serivce", "====Service====onUnbind");
return super.onUnbind(intent);
}
/* (non-Javadoc)
* @see android.app.Service#onRebind(android.content.Intent)
*/
@Override
public void onRebind(Intent intent) {
// TODO Auto-generated method stub
Log.e("Serivce", "====Service====onRebind");
super.onRebind(intent);
}
如上面的代码,onUnbind方法中,返回的是父类的onUnbind方法,查源码可以知道,父类这个方法默认返回false哦,
所以不会触发onRebind方法。。
说了很多,大概Service声明周期就这样吧,还有更多的大家一起探究吧.