2014-07-03 26 views
1

我正在创建一个音乐播放器应用程序。手柄通知隐藏,当应用程序崩溃/死亡

当音乐播放时,我正在显示当前歌曲的notification(类似于默认的Android音乐播放器应用程序)。

我在Service中运行音乐并仅处理该服务中的通知显示/隐藏。

当应用程序突然崩溃/崩溃时,音乐服务停止&音乐在后台也是如此(我猜这是一种正确的行为)。

但即使在崩溃后,通知仍然存在。

我该如何处理这个问题?

一种情况处理:

音乐服务正在运行并显示通知。

用户点击recent apps并杀死我的应用程序,因此服务停止,但通知仍然可见。

我如何处理它:

据预计,如果正在播放音乐和用户完成MainActivity,那么音乐应该保持在后台播放。

所以,如果backpressed == true,然后在onDestroy(),不取消的通知。 (由用户完成活动)

否则,如果backpressed == false,则在onDestroy()中,通知。 (活动突然死亡)

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    mBackPressed = true; 
} 

@Override 
protected void onDestroy() { 
    if (!mBackPressed) { 
     mMusicService.hideStatusBarNotification(); 
    } 

    super.onDestroy(); 
    Log.e(TAG, "onDestroy() called - Activity"); 
} 

这是否是一种很好的方法。

此外,这只是一个场景,我不能想到如何应用程序+服务可以突然死亡,&如何处理它?

谢谢

+1

相关:http://stackoverflow.com/questions/12997800/cancel-notification-on-remove-application-from-multitask-panel – ben75

回答

0

你处理它的方式似乎很不错。另一种方法是添加一个Application类,该类捕获任何未被您自己的代码捕获的Exception。你肯定包含在这个类的代码是任何崩溃之前执行这种方式。 类可能是这样的:

public class MyApplication extends Application { 
// uncaught exception handler variable 
private Thread.UncaughtExceptionHandler defaultUEH; 

// handler listener 
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = 
     new Thread.UncaughtExceptionHandler() { 
      @Override 
      public void uncaughtException(Thread thread, Throwable ex) { 

       Log.e("UNCAUGHT EXCEPTION CAUGHT!", ex.toString()); 

       // Hide notification here ;) 

       // re-throw critical exception further to the os (important) 
       defaultUEH.uncaughtException(thread, ex); 
      } 
     }; 

public MyApplication() { 
    defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); 

    // setup handler for uncaught exception 
    Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler); 
} 

}

后,你在每一个应用程序启动实例化这个类,在活动的onCreate()方法。

相关问题