android - 为什么 onServiceDisconnected 在应用程序崩溃时不会被调用?

标签 android service crash unhandled-exception serviceconnection

我有一个常规的 Android 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");
    }
};

服务已绑定(bind)并启动得很好。在服务连接一段时间后,我故意使应用程序崩溃;但是,onServiceDisconnected 从未被调用 - 这是为什么?根据文档,每当应用程序崩溃时都会调用它......

我想要完成的事情是:

假设用户直接杀死进程/或意外地发生崩溃,我希望发生某些事情(例如...取消通知...这就是我当前在 Activity 的 onStop() 中所做的事情) 。但我应该从哪里取消通知呢?如果应用程序崩溃,还可以断开服务吗?

最佳答案

我从未见过在应用崩溃时甚至在 Activity 与服务解除绑定(bind)时调用 onServiceDisconnected(...) 。我认为只有当服务终止但绑定(bind) Activity 没有执行任何操作时才会调用它,也许是因为操作系统决定终止它以节省内存。我不知道如何故意导致这种情况发生。您可以尝试向您的服务添加故意崩溃,然后看看会发生什么,但我认为这只会使您的整个应用程序崩溃,除非该服务在自己的进程中运行。

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

关于android - 为什么 onServiceDisconnected 在应用程序崩溃时不会被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121783/

相关文章:

android - HTML 粗体标记问题 -

java - 打印作业已提交给打印机,但未打印任何内容。 java

service - 本地计算机上的 Datastax cassandra 社区服务器 2.1.10 服务启动然后停止

java - 如何从复选框 ListView 将变量设置为 true/false?

android - 捏合和缩放 RecyclerView 布局以设置动画并更改布局管理器跨度计数

iPhone SDK :NSScanner crashing randomly

c++ - 如何保持文件中变量的最新值?

Android Logback - 在应用程序崩溃时将堆栈跟踪存储到日志文件中

android - 等宽等高 View

java - 如何在android中创建后台服务?