2014-07-03 101 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()方法。

相關問題