Как убрать уведомление при сбое активности? - PullRequest
5 голосов
/ 27 октября 2010

В моем приложении я создаю уведомление с установленным флажком FLAG_ONGOING_EVENT ..

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

Я отменяю уведомление в onDestroy, но если мое приложение падает перед вызовом onDestroy, есть ли способ отменить уведомление?

Роб У.

Ответы [ 3 ]

18 голосов
/ 05 января 2011

Все вылетает, даже приложения 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);
  }
}
5 голосов
/ 27 октября 2010

Это более или менее тот же вопрос, что и Обратный вызов перед принудительным закрытием активности Android? , поэтому я повторю свой ответ здесь:

Я бы порекомендовал не вызывать сбой вашего приложенияна первом месте.Если есть что-то, что МОЖЕТ потерпеть крах, просто поместите try / catch вокруг него и обработайте его должным образом.

Или, как своего рода глобальный try / catch, вы можете использовать Thread.setUncaughtExceptionHandler().Наконец, вы могли бы даже рассмотреть Runtime.addShutdownHook, но это, скорее всего, плохая идея.

Исправьте ваши сбои.Это единственное разумное решение.

2 голосов
/ 27 октября 2010

Нет. Когда ваше приложение падает, после сбоя ничего нельзя сделать! Либо поймай исключение и разберись с ним (хотя catch Exception e {...} - это крайне плохая идея), либо сделай так, чтобы твое приложение не падало (на мой взгляд, это было бы хорошей тактикой).

...