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()”调用中,当应用程序崩溃时,我想要发生的事情不会发生 –

相关问题