【问题标题】:Handle Notification hide, when app crashes/killed处理通知隐藏,当应用程序崩溃/终止时
【发布时间】:2014-07-03 15:11:06
【问题描述】:

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

当音乐播放时,我会显示当前歌曲的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");
}

这是处理好方法吗?

还有,这只是一种场景,想不到应用+服务怎么会被突然杀掉,怎么处理?

谢谢

【问题讨论】:

标签: android android-service android-notifications


【解决方案1】:

你处理它的方式对我来说似乎很好。另一种方法是添加一个 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);
}

}

之后,在每次应用启动时,在活动的 onCreate() 方法中实例化此类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多