-
Service四大组织之一 需要在清单文件里注册
-
-
<service android:name=".My_Serve"> <intent-filter> <action android:name="my_menu_seaver" /> </intent-filter> </service>
-
//设置Intent 需要跳转的Service intent = new Intent("my_menu_seaver"); // intent.setAction("my_menu_seaver"); //设置全包名 intent.setPackage(getPackageName()); //绑定service 需要ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("MainActivity", "bind_关联"); } @Override public void onServiceDisconnected(ComponentName name) { Log.d("MainActivity", "取消关联"); } };
-
在Service的生命周期中,被回调的方法比Activity少一些,只有五种:
- onCreate
- onStartCommand
- onDestroy
- onBind
- onUnbind
通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
-
通过startService
- Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。
- 如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
-
通过bindService
- Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。
- 所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。
需要注意的是如果这几个方法交织在一起的话,会出现什么情况呢?
一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。
-
如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。
-
如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只能调用UnbindService, service就会被销毁
-
如果一个service通过startService 被start之后,多次调用startService 的话,service会多次调用onStart方法。多次调用stopService的话,service只会调用一次onDestroyed方法。
-
如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。
-
多次调用unbindService的话会抛出异常。
-
@Override public void onClick(View v) { switch (v.getId()) { case R.id.start_Btn: //启动 startService(intent); break; case R.id.bind_Start_Btn: //绑定 bindService(intent, connection, BIND_AUTO_CREATE); break; case R.id.stop_Btn: //停止 stopService(intent); break; case R.id.jiebang: //解绑 unbindService(connection); break; case R.id.start_intent_Btn: //跳转 break; } }