Service是Android的四大组件之一。Activity中开启Service有两种方式。一种调用startService(Intent intent)方法开启Service并通过stopService()方法结束 Service实例。另一种是通过bindService(Intentservice, ServiceConnection conn, int flags)的方式绑定Service调用Service的onBind(Intent intent)方法并通过unbindService(ServiceConnection conn)接触绑定。这两种之间的区别在于:第一种的方式时,Service的生命周期与Activity想关即当调用的Activity finish()之后,Service 也随即的关闭。而第二种通过bindService的方式绑定的Service则不同,Service与Activity不行关。Activity 在finish之后,Service也依然运行。
再谈一下启动的过程startService方式第一次调用Service的时候会调用onCreate()的方法----onCreate()----onStartCommand(Intent intent, int flags, int startId)--- onStart方法但是当后续继续启动该Service时不会再继续调用该Service的oncreate()方法,当调用stopService的时候调用onDestroy.不管前面启动多少次Serivce,调用stopService会关闭所有的实例。
写一个Demo:
public class MainActivity extends Activity implements OnClickListener{ private Button start,stop,bind,unbind; public ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init(){ start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop); start.setOnClickListener(this); stop.setOnClickListener(this); bind = (Button)findViewById(R.id.bind); unbind = (Button)findViewById(R.id.unbind); bind.setOnClickListener(this); unbind.setOnClickListener(this); } public void onClick(View view){ Intent intent = new Intent(MainActivity.this,TestService.class); if(view.getId()==R.id.start){ startService(intent); }else if (view.getId()==R.id.stop) { stopService(intent); } else if (R.id.bind == view.getId()) { bindService(intent, conn, BIND_AUTO_CREATE); }else if (R.id.unbind == view.getId()) { unbindService(conn); } } }Service类
public class TestService extends Service { public BindHelper helper = new BindHelper(); class BindHelper extends Binder{ } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.e("debug", "onBind"); return null; } @Override @Deprecated public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub Log.e("debug", "onStart"); super.onStart(intent, startId); } @Override public void onCreate() { // TODO Auto-generated method stub Log.e("debug", "onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.e("debug", "onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub Log.e("debug", "onDestroy"); super.onDestroy(); } }