如果活动崩溃,如何清除通知?

时间:2010-10-26 22:57:04

标签: android crash android-activity notifications

在我的应用中,我正在创建一个FLAG_ONGOING_EVENT标志设置为通知的通知。

Notification notification = new Notification(iconId, text, System.currentTimeMillis());  
notification.flags |= Notification.FLAG_ONGOING_EVENT;

我正在取消onDestroy中的通知,但是如果我的应用在调用onDestroy之前崩溃了,有没有办法让我的通知消失?

Rob W。

3 个答案:

答案 0 :(得分:18)

一切都崩溃了,甚至是Google应用程序。我使用Thread.setUncaughtExceptionHandler()和以下处理程序代码:

package my.package;

import java.lang.Thread.UncaughtExceptionHandler;

import android.app.NotificationManager;
import android.content.Context;

public class CrashHandler implements UncaughtExceptionHandler
{
  private static final int NOTIFICATION_ID = 12345;

  private UncaughtExceptionHandler defaultUEH;
  private NotificationManager notificationManager;

  public CrashHandler(Context context)
  {
    this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
  }

  public void uncaughtException(Thread t, Throwable e)
  {
    if (notificationManager != null)
    {
      try
      {
        notificationManager.cancel(NOTIFICATION_ID);
      }
      catch (Throwable ex)
      {
        ex.printStackTrace();
      }
    }
    notificationManager = null;

    defaultUEH.uncaughtException(t, e);
  }
}

答案 1 :(得分:5)

这或多与Callback before Force Close of Android Activity?的问题大致相同,所以我在此重复一遍:

我建议不要让你的应用程序崩溃。如果有可能会崩溃的东西,只需在它周围放一个try / catch并正确处理它。

或者,作为某种全局尝试/捕获,您可以使用Thread.setUncaughtExceptionHandler()。最后,你甚至可以考虑Runtime.addShutdownHook,但这很可能是一个坏主意。

修复您的崩溃。这是唯一理智的解决方案。

答案 2 :(得分:2)

没有。当您的应用程序崩溃时,崩溃后无法做任何事情!要么捕获异常然后处理它(虽然catch Exception e {...}非常坏主意),或者让你的应用程序不崩溃(在我看来这将是一个很好的策略)。