在我的应用程序中,我运行了多个服务。当用户停止应用程序(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);
}
感谢
答案 0 :(得分:6)
你可以打电话
Thread.setDefaultUncaughtExceptionHandler()
在线程中的应用程序未处理某些异常时调用处理程序。 如果Thread由于未处理的异常而死亡,则调用此处理程序。
在这里你需要做清理工作。
这正是ACRA崩溃报告库捕获崩溃的原因。
答案 1 :(得分:3)
首先您需要确保application should not get crashed at any cost
并回答您的问题,您应该覆盖服务的onDestroy()
方法并取消通知,因为它在服务的情况下都适用于您停止或崩溃。
由于onDestroy()
无法使用crash
,因此您需要放置try catch block
并在获得异常后执行相应的操作。