Android APK更新终止前台服务-报告为崩溃

Android APK更新终止前台服务-报告为崩溃,android,service,Android,Service,情况是: 我的应用程序正在使用活动的前台服务运行 我选择重新安装或升级我的应用程序 系统将强制退出旧应用程序,包括服务 系统现在将报告我的服务崩溃。 系统将替换应用程序 我的新应用已安装,可以启动并运行,根据需要再次启动前台服务 有什么方法可以避免系统在终止foregorized服务时报告崩溃? running应用程序从未收到任何退出挂钩类型的信息,只是离开了。我没有办法停止前台,这样操作系统就不会对该服务的消失感到惊讶 这只是前台服务的一部分吗?我不是Spotify之类的,但我想像这样的应

情况是:

  • 我的应用程序正在使用活动的前台服务运行
  • 我选择重新安装或升级我的应用程序
  • 系统将强制退出旧应用程序,包括服务
  • 系统现在将报告我的服务崩溃。
  • 系统将替换应用程序
  • 我的新应用已安装,可以启动并运行,根据需要再次启动前台服务
有什么方法可以避免系统在终止foregorized服务时报告崩溃? running应用程序从未收到任何退出挂钩类型的信息,只是离开了。我没有办法停止前台,这样操作系统就不会对该服务的消失感到惊讶

这只是前台服务的一部分吗?我不是Spotify之类的,但我想像这样的应用程序一定会时不时地出现在这里

我将感谢任何专家对这一主题的洞察,以及如果有什么可以做的话。我的企业应用程序(某种程度上)让QA感到恼火,因为他们每次升级都会看到崩溃

澄清最新情况: 各种软件包将通知应用程序正在安装、更新或删除的其他应用程序。他们不会告诉正在被替换的应用程序这即将发生

还有一个MY_PACKAGE_替换的意图,它会告诉您有关更新的信息。但它会通知新安装的版本,安装是一个更新

我没有办法阻止前台,这样操作系统就不会对服务的消失感到惊讶

你可以用

广播操作:已安装应用程序的新版本 在现有的基础上。这只会发送到已创建的应用程序 替换。它不包含任何附加数据;要接受它,只需 为此操作使用意图筛选器

[编辑]
我做了一个小调查-我做的是,
创建了一个类-

public class InstallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Timber.e("onReceive() %s", intent.getAction());
    }
}
在manifest.xml中注册了该接收方

<receiver
            android:name=".receivers.InstallReceiver"
            android:enabled="true"
            android:exported="true">

            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_INSTALL" />
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
            </intent-filter>
</receiver>
[编辑2]
如果你想在应用程序被替换之前知道,我想没有办法而且您不必担心,因为如果应用程序被替换,则进程将被系统终止。没有其他特别的东西可以表演


欲了解更多信息,请随意猜测:也许
Intent#ACTION*u PACKAGE u*
能有所帮助?我已经在实施我的u PACKAGE了。但这对解决这个问题没有帮助。正如您引用的文本所述:这仅通知作为更新安装的新应用程序。它允许我检查我的应用程序是否被中断,我是否应该自动启动服务。接收器是否触发?如果是,你可以用它来停止你的服务,以后再启动。这个问题是专门为“旧”应用程序在被杀死之前得到通知。我知道没有不良行为,但QA人员被前台服务强制退出时的系统调用“崩溃”吓坏了。哎呀,没办法!谢谢这也是我的理解,但我感觉到了来自经验丰富的Android开发者的确认压力。
E/InstallReceiver: onReceive() android.intent.action.MY_PACKAGE_REPLACED