0

我有一个普通的安卓ServiceConnection

我正在覆盖这样的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() 中所做的)。但是我应该从哪里取消通知?如果应用程序崩溃了还要断开服务吗?

4

1 回答 1

2

我从来没有见过onServiceDisconnected(...)在应用程序崩溃时调用,甚至在活动与服务解除绑定时调用。我认为只有在服务死亡时才调用它,尽管绑定活动没有任何动作,可能是因为操作系统决定杀死它以节省内存。我不知道如何故意导致这种情况发生。您可以尝试向您的服务添加故意崩溃并查看会发生什么,但我认为这只会使您的整个应用程序崩溃,除非该服务在自己的进程中运行。

我也有类似的需要,以确保在应用程序崩溃或被终止时会发生某些事情,因为许多设备上的蓝牙非常不稳定,并且如果在应用程序崩溃时打开蓝牙套接字,适配器可能会处于它的状态在手机或平板电脑重新启动之前,无法再次连接到同一设备/uuid。我发现onDestroy()当应用程序崩溃时也不会调用服务,除非该服务在自己的进程中运行。如果您决定走这条路,请注意该服务将继承它自己的 Application 类副本,因此如果您已将其扩展为保存全局数据,则该服务将拥有自己的所有副本。

于 2014-04-16T23:33:22.120 回答