要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。
现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:
A. 编写需要运行在后台的类继承自android.app.Service。
public class MyService extends Service {
//服务生命周期 创建,开始,销毁
/** * 创建 */ @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.d("info", "Service Create"); } /* * 开始 * (non-Javadoc) * @see android.app.Service#onStart(android.content.Intent, int) */ @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); Log.d("info", "Service Start"); } /** * 销毁 */ @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("info", "Service Destroy"); }
/**
* 当Service与Activity成功绑定时调用这个方法(non-Javadoc) * @see android.app.Service#onBind(android.content.Intent) */ @Override public IBinder onBind(Intent arg0) { Log.d("info","Service Bind Success"); return null; } /** * 重新绑定 */ @Override public void onRebind(Intent intent) { super.onRebind(intent); Log.d("info","Service ReBind Success"); } /** * 取消绑定 */ @Override public boolean onUnbind(Intent intent) { Log.d("info","Service Unbind Success"); return super.onUnbind(intent); } }
B. 在AndroidManifest.xml中配置<service>标签
<service android:name=".MyService" android:enabled="true" ></service>
C. 绑定服务:
(1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成
由该方法的第二个参数可以确定第二步要做什么
(2) 编写类实现ServiceConnection 接口
class MyServiceConnection implements ServiceConnection
{@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) { Log.d("info", "Service Connection Success"); //成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型}
@Override
public void onServiceDisconnected(ComponentName arg0) { // TODO Auto-generated method stub Log.d("info", "Service Connection Filed"); //连接失败执行 } }(3)使用
class BtnClick implements OnClickListener
{ @Override public void onClick(View arg0) { Intent intent = new Intent(Main.this,MyService.class); MyServiceConnection myServiceConnection = new MyServiceConnection(); switch (arg0.getId()) { case R.id.btnStart: Main.this.startService(intent); break; case R.id.btnStop: Main.this.stopService(intent); break; case R.id.btnBind: Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE); break; case R.id.btnUnBind: //ServiceConnection必须是全局变量否则此处报错 Main.this.unbindService(myServiceConnection ); break; default: break; } } }
***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。