要知道如果調用函數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停止服務。