【问题标题】:How to clear a notification if activity crashes?如果活动崩溃,如何清除通知?
【发布时间】:2010-10-26 22:57:03
【问题描述】:

在我的应用程序中,我正在创建一个设置了 FLAG_ONGOING_EVENT 标志的通知..

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

我正在取消 onDestroy 中的通知,但如果我的应用在调用 onDestroy 之前崩溃了,有什么方法可以让我的通知消失吗?

罗伯·W.

【问题讨论】:

  • @EboMike 如果你知道一种方法可以为一个相当复杂的普通用法 android 应用程序编写 100% 健壮的代码,该代码永不崩溃(没有有效地将你的代码全部包装在 try-catch 中)。 .. plz - 透露你如何完成这样的编码方法

标签: android crash android-activity notifications


【解决方案1】:

一切都崩溃了,甚至是 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);
  }
}

【讨论】:

  • 你能简单解释一下你是如何使用这个类的吗?
【解决方案2】:

这和Callback before Force Close of Android Activity?的问题差不多,所以我在这里重复我的回答:

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

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

修复崩溃问题。这是唯一明智的解决方案。

【讨论】:

  • 是的,特定的崩溃已经修复,我只是希望有一些方法可以在现场更好地处理它,以防将来可能出现并导致我的应用程序崩溃的任何错误。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2016-09-26
    • 2023-03-30
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多