处理通知隐藏,当应用程序崩溃/死亡



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

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

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

当应用程序突然被破坏/崩溃时,音乐服务被停止&背景音乐也是如此(我想这是一种正确的行为)。

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

我该如何处理这个问题?

一个场景处理:

音乐服务正在运行,提示信息

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

我是怎么处理的:

如果音乐正在播放,并且用户完成了MainActivity,那么音乐应该继续在后台播放。

因此,如果backpressed == true,那么在onDestroy()中,不要取消通知。(用户完成的活动)

Else,如果是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");
}

这是一个好的处理方法吗?

另外,这只是一种情况,我无法想象应用程序+服务是如何突然被杀死的,&如何处理?

谢谢

我觉得你处理这件事的方式还不错。另一种方法是添加一个Application类,它可以捕获您自己的代码未捕获的任何异常。这样,您就可以确保在任何崩溃之前执行该类中包含的代码。类可能看起来像这样:

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);
}

}

之后,你在每次应用启动时实例化这个类,在你的activity的onCreate()方法中。

最新更新