Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序崩溃后清除状态栏中的通知_Android_Notifications - Fatal编程技术网

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

Android 应用程序崩溃后清除状态栏中的通知,android,notifications,Android,Notifications,在我的应用程序中,有几个服务正在运行。当用户停止应用程序(UI部分)服务在后台运行并在状态栏中显示通知(每个服务都有一个)时。单击此对话框时,将显示取消相应服务的选项 这是我的问题。当出现问题和应用程序崩溃时,状态栏区域会保留通知。是否可以在显示标准android强制关闭对话框之前清除所有通知 当我试图点击通知打开活动时,真正的错误是NPE。已经修好了。但我只想知道如何在应用程序崩溃时清除所有内容 这是我的最终解决方案,灵感来自mice的帖子。在创建方法上的应用程序中,我注册了Thread.s

在我的应用程序中,有几个服务正在运行。当用户停止应用程序(UI部分)服务在后台运行并在状态栏中显示通知(每个服务都有一个)时。单击此对话框时,将显示取消相应服务的选项

这是我的问题。当出现问题和应用程序崩溃时,状态栏区域会保留通知。是否可以在显示标准android强制关闭对话框之前清除所有通知

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


这是我的最终解决方案,灵感来自mice的帖子。在创建方法上的应用程序中,我注册了Thread.setDefaultUncaughtExceptionHandler()


谢谢

首先,您需要确保您的
应用程序不会以任何代价崩溃
并回答您的问题,您应该覆盖服务的
onDestroy()
方法并取消那里的通知,因为在服务停止或崩溃的情况下,它都会对您有效

由于在发生
crash
的情况下不能使用
onDestroy()
,因此您需要放置
try catch block
,并在获得异常后执行适当的操作。

您可以调用

当应用程序在线程中未处理某些异常时,将调用处理程序。 如果线程因未处理的异常而死亡,将调用此处理程序

这是你需要做的清理工作


这就是崩溃报告库是如何崩溃的。

如果我是你的应用程序的用户,我希望答案是“更努力地工作,避免应用程序崩溃”。K-Balo:即使是最好的应用程序也会崩溃,所以我认为这是个好问题。没有通知比死通知好。我认为在应用程序崩溃时不会调用
ondestory()
。@inazaruk:是的,你是对的。我检查了一下,什么都没打。看起来这是一个解决方案UncaughtExceptionHandler=newuncaughtexceptionhandler(){@Override public void uncaughtException(线程,Thread-Thread,Throwable-ex){getNotificationManager().cancelAll();throw new RuntimeException(ex);};setDefaultUncaughtExceptionHandler(handler);'它清除通知。但现在我有问题如何强制android关闭我的应用程序。
@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);
}