应用程序崩溃后在状态栏中清除通知

时间:2011-09-30 06:42:53

标签: android notifications

在我的应用程序中,我运行了多个服务。当用户停止应用程序(UI部分)服务仍在后台运行并且在状态栏中显示通知(每个服务都有一个)时。点击它时出现对话框,选择取消适当的服务。

这是我的问题。当出现问题并且应用程序崩溃时,通知仍保留在状态栏区域中。是否可以在显示标准的android force close对话框之前清除所有通知?

当我尝试打开点击通知的活动时,真正的错误是NPE。这是固定的。但我只想知道在应用程序崩溃时如何清除所有内容。


这是我最后的解决方案,受到老鼠帖子的启发。在创建方法的应用程序中,我注册了Thread.setDefaultUncaughtExceptionHandler()

@Override
public void onCreate() {
    super.onCreate();
    this.notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
    UncaughtExceptionHandler appHandler = new UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            this.notificationManager.cancelAll();
            defaultHandler.uncaughtException(thread, ex);
        }
    };
    Thread.setDefaultUncaughtExceptionHandler(appHandler);
}

感谢

2 个答案:

答案 0 :(得分:6)

你可以打电话

Thread.setDefaultUncaughtExceptionHandler()

在线程中的应用程序未处理某些异常时调用处理程序。 如果Thread由于未处理的异常而死亡,则调用此处理程序。

在这里你需要做清理工作。

这正是ACRA崩溃报告库捕获崩溃的原因。

答案 1 :(得分:3)

首先您需要确保application should not get crashed at any cost并回答您的问题,您应该覆盖服务的onDestroy()方法并取消通知,因为它在服务的情况下都适用于您停止或崩溃。

由于onDestroy()无法使用crash,因此您需要放置try catch block并在获得异常后执行相应的操作。