Java 在android中更新新版本后重新启动应用程序

Java 在android中更新新版本后重新启动应用程序,java,android,mobile,Java,Android,Mobile,我认为这个问题重复了这一点 每当我在市场上发布我的应用程序的新版本时,如果用户启用了“自动更新”选项,应用程序将自动更新 该应用程序包含一个持续运行的服务。但是,当自动更新发生时,旧的运行应用程序将被杀死,而新的应用程序不会启动。由于更新对用户来说几乎是透明的,因此在更新后应用程序的服务应该自动重新启动,这样服务几乎不会中断,这是有道理的 用市场上真正的更新来测试这一点有点困难,所以我使用以下两个adb命令来模拟这个更新过程。安装第1个版本: adb安装oldversion.apk/(版本代码

我认为这个问题重复了这一点

每当我在市场上发布我的应用程序的新版本时,如果用户启用了“自动更新”选项,应用程序将自动更新

该应用程序包含一个持续运行的服务。但是,当自动更新发生时,旧的运行应用程序将被杀死,而新的应用程序不会启动。由于更新对用户来说几乎是透明的,因此在更新后应用程序的服务应该自动重新启动,这样服务几乎不会中断,这是有道理的

用市场上真正的更新来测试这一点有点困难,所以我使用以下两个adb命令来模拟这个更新过程。安装第1个版本:

adb安装oldversion.apk/(版本代码为1) 自动更新:

adb安装-r newversion.apk/(版本代码为2)


在我的例子中,我有两个活动,第一个是MainActivity,第二个是Activity。如果用户正在使用secondActivity,并且应用程序自动更新(对于我来说,我正在使用adb命令安装新版本),那么在应用程序成功更新新版本后,如何触发run MainActivity

我也认为这是一个重复的问题。您是否尝试过为注册广播使用
MY\u PACKAGE\u REPLACED
in intent过滤器?(当设备重新启动时也会触发,可能有用)

舱单:

<receiver
        android:name=".OnUpdateReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
您可以使用此命令测试此代码,不需要“真正的”更新


还有来自官方Google Play Core API的直接版本,也许这将用最少的代码解决您的问题

您是否考虑过将其用于应用程序更新?谢谢您的回答,是的,我确实尝试过,但由于API 28中的Google文档,已不再支持替换的操作\u我的\u包。注:其他与节目包相关的广播(如行动节目包被替换)不免除新的限制。这些广播非常常见,因此豁免它们可能会对性能产生影响。您能提供一些链接吗(此操作已停止/不再工作)?根据意图-
我的软件包被替换
操作仍在使用中,与列表中的一些操作一样,完全没有被弃用。。。
public class OnUpdateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null ||
                (!Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction()) &&
                        !Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())))
            return;
        // your code, start your Service again or
        // Activity if it is REALLY desired behavior
    }
}
adb shell am broadcast -a android.intent.action.MY_PACKAGE_REPLACED -n com.yourapp/.OnUpdateReceiver