我从我的应用程序(而不是服务)管理ONGOING通知.
当我用任务管理器用"结束"按钮终止应用程序时,通知消失.
当我从多任务pannel中删除应用程序时,应用程序被杀死但通知仍然存在.
我的问题是:
作为更新:
我的所有活动都使用以下方法扩展了MyActivity类(扩展了Activity):
@Override protected void onCreate(Bundle state) {
super.onCreate(state);
((MyApplication) getApplication()).onActivityCreate(this, state);
}
@Override protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).onActivityDestroy(this);
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序使用以下方法扩展了MyApplication类(扩展了Application):
private List<Activity> activities = new ArrayList<Activity>();
protected final void onActivityCreate(Activity activity, Bundle state) {
if(activities.isEmpty() && state == null) {
onStart();
}
activities.add(activity);
}
protected final void onActivityDestroy(Activity activity) {
activities.remove(activity);
if(activities.isEmpty() && activity.isFinishing()) {
onExit();
}
}
protected void onStart() {
// some code …Run Code Online (Sandbox Code Playgroud) 我一直onTaskRemoved()在服务中使用方法来检测应用程序从设备最新列表中删除的时间.我预先形成一些日志记录和其他需要在发生这种情况时发生的操作.它完美地运作.
然后我在运行Android 6.0的HUAWEI设备上检查了这个方法.该方法永远不会被调用.我还添加了一个Log.d调用,正如预期的那样,这个日志从未出现过.在XIOMI设备上也是如此.
任何想法为什么会发生以及如何解决这个问题?或者有没有另一种方法来检测应用程序是否已从RECENT列表中删除而不依赖onTaskRemoved()?
谢谢
如何在没有显示通知点的情况下在android Oreo中继续后台服务?我使用通知继续我的后台服务,但我不想显示运行服务的通知.
java android push-notification android-service android-8.0-oreo
我有一个实现的应用程序MediaBrowserServiceCompat。播放音乐时,它会在前台运行,并带有媒体控制通知,告知系统不可关闭。暂停时,它不显示在前台,并且保留通知。标准的东西。
当系统自动终止该服务时,不会删除该通知。
您可以通过将应用置于非前景暂停状态,离开应用并发出以下命令来模拟此情况:
adb shell am kill com.myapp.package
Run Code Online (Sandbox Code Playgroud)
通知仍然存在。您收到此Logcat消息:
W/ActivityManager: Scheduling restart of crashed service com.myapp.package/com.myapp.package.playback.platform.AndroidMediaService
Run Code Online (Sandbox Code Playgroud)
明显的挂钩(如没有onDestroy,onTaskRemoved对服务等)似乎是叫-它似乎被彻底杀死。由于该服务始于START_NOT_STICKY,我们也不会onCreate在新实例上调用它。
的部分解决方案,这是使服务粘,并取消通知时的服务被恢复。但是,这可能需要花费大量时间才能真正发生,在此期间通知不起作用,因此并不理想。它还可能会产生进一步的后果。
其他应用程序似乎对此没有任何问题。
重复这种情况(暂停,退出应用)并执行命令,例如在Google Play音乐上:
adb shell am kill com.google.android.music
Run Code Online (Sandbox Code Playgroud)
或Spotify:
adb shell am kill com.spotify.music
Run Code Online (Sandbox Code Playgroud)
并且您发现他们的通知会立即消失,就像它们在拆除时被取消一样。
他们会怎么做才能做到这一点?