0

在我的活動,我開始我的服務我的活動&綁定服務的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 ...

+0

您需要從scratchcg重新啓動服務而不是僅僅使用生命週期方法重置其狀態的動機是什麼? – Submersed

+0

我在MyService的onCreate()中有一些操作,它必須在那裏。我想在BroadcastReceiver中調用onReceive()時觸發MyService的onCreate()。那就是在那個時候再次從頭開始提供乾淨的服務。 –

+0

你的建築聽起來很好笑。如果你在'Service'的'onCreate()'中有代碼,當你的接收器被觸發時你想要執行這個代碼,把這個代碼移動到一個單獨的方法中,讓你的接收器調用'startService()'傳遞了'Intent',告訴你的'Service'重新初始化自己。在'onCreate()'和'onStartCommand()'中,你可以調用「初始化」方法。 –

回答

0

Service文檔:

多個客戶端可以連接到服務一次。但是, 系統只有在第一個客戶端綁定時才調用您的服務的onBind()方法來檢索IBinder 。系統然後將同一個 IBinder交付給綁定的任何其他客戶端,而無需再次調用onBind() 。

當最後一個客戶端從服務中解除綁定時,系統銷燬 服務(除非服務也由startService()啓動)。

因此,在使用您的服務時,請勿使用startService(intent)開始服務,而應使用bindService(service, conn, flags)開始服務。這樣,如果您的Activity是與服務綁定的唯一活動,那麼當您致電unbindService(ServiceConnection conn)時,系統將終止您的服務,然後您可以重新綁定。

+0

但我需要開始我的服務。我在onStartCommand()中有函數需要執行。 –

+1

onBind()方法能否達到同樣的目的? – Submersed

+0

@ Leem.fin請檢查此鏈接以獲取有關bind和onStartCommand的更多信息,以及它是如何不同的? https://groups.google.com/forum/#!topic/android-developers/xxo_Tls7CDk –

相關問題