0

我有一個普通的Android ServiceConnection爲什麼onServiceDisconnected在應用程序崩潰時沒有被調用?

我重寫onServiceDisconnected()方法,像這樣:

private ServiceConnection myConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 

    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     System.out.println("MyTag why are you not getting called"); 
    } 
}; 

和服務綁定,並開始就好了。服務連接一段時間後,我故意使應用程序崩潰;然而,onServiceDisconnected從未被稱爲 - 爲什麼?根據文件,這應該被調用每當應用程序崩潰...

,我試圖完成的事情是這樣的:

假設用戶只是平了殺死進程/或意外遇到崩潰,我想要發生某些事情(如...取消通知......這正是我目前在活動的onStop()中所做的)。但我應該在哪裏取消通知?如果應用程序崩潰,還可以斷開服務?

+0

我想[這](http://stackoverflow.com/questions/971824/when-does-serviceconnection-onservicedisconnected-get-called)是你在找什麼。 – Dariush

回答

2

我從來沒有見過onServiceDisconnected(...)當一個應用程序崩潰,甚至當一個活動從一個服務中解綁時調用。我認爲只有在服務死亡時纔會調用,這可能是因爲操作系統決定殺死它以節省內存。我不知道如何故意造成這種情況發生。您可以嘗試向您的服務添加故意的崩潰並查看會發生什麼,但是我認爲這會導致整個應用程序崩潰,除非該服務在自己的進程中運行。

我有類似的需要,以確保某些事情發生時,如果一個應用程序崩潰或死亡,因爲許多設備上的藍牙極其片狀,並且如果應用程序崩潰時打開藍牙套接字,適配器可以留在在重新啓動手機或平板電腦之前,無法再次連接到相同設備/ uuid的狀態。我發現當應用程序崩潰時,服務的onDestroy()也不會被調用,除非服務在其自己的進程中運行。如果您決定走這條路線,請注意服務將繼承自己的應用程序類的副本,因此如果您已將其擴展爲保存全局數據,則該服務將擁有其自己的所有副本。

+0

是啊...看到的問題是,在所有的「onStop()」調用中,當應用程序崩潰時,我想要發生的事情不會發生 –

相關問題