在我的活動,我開始我的服務我的活動&綁定服務的onStart()
在onResume()
:摧毀和我的情況下重新創建服務
public class MyActivity extends Activity{
private boolean isBound;
ServiceConnection myConnection = new ServiceConnection(){...};
@Override
public void onStart(){
super.onStart();
startService(new Intent(this, MyService.class));
}
@Override
public void onResume(){
super.onResume();
Intent service = new Intent(this, MyService.class);
isBound = bindService(service, myConnection, Context.BIND_AUTO_CREATE);
}
}
我有一個BroadcastReceiver
類,在其onReceive()
回調,我想重新啓動我的服務。我的意思是它,它再次調用startService()
完全& 科瑞破壞:
public class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//I want to re-start MyService from scratch, i.e. destroy it & start it (create it) again
Intent service = new Intent(context, MyService.class);
stopService(service);
startService(service);
}
}
但是隨着Android的文件說,我上面的代碼不保證先前啓動的服務將被銷燬,因爲我也綁定它。
我的問題是什麼是最有效的方式,在MyBroadcastReceiver
解除綁定MyService
重新開始從頭MyService
?正如你看到的,綁定的myConnection
實例是MyActivity ...
您需要從scratchcg重新啓動服務而不是僅僅使用生命週期方法重置其狀態的動機是什麼? – Submersed
我在MyService的onCreate()中有一些操作,它必須在那裏。我想在BroadcastReceiver中調用onReceive()時觸發MyService的onCreate()。那就是在那個時候再次從頭開始提供乾淨的服務。 –
你的建築聽起來很好笑。如果你在'Service'的'onCreate()'中有代碼,當你的接收器被觸發時你想要執行這個代碼,把這個代碼移動到一個單獨的方法中,讓你的接收器調用'startService()'傳遞了'Intent',告訴你的'Service'重新初始化自己。在'onCreate()'和'onStartCommand()'中,你可以調用「初始化」方法。 –