当app崩溃/被杀时,处理通知隐藏

时间:2014-07-03 15:11:06

标签: android android-service android-notifications

我正在创建一个音乐播放器应用程序。

当音乐播放时,我显示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 个答案:

答案 0 :(得分: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()方法的每个应用开始时实例化此类。

相关问题