You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓应用通过应用商店更新时,首次运行检测代码是否执行?

关于安卓应用更新时首次运行检测代码的问题解答

嘿,我来帮你搞清楚这个问题~

首先直接给你答案:这段代码在应用通过应用商店更新时,不会执行首次运行的逻辑。

原因分析

你的代码是通过SharedPreferences存储一个isFirst标记来判断是否首次运行的,而SharedPreferences的数据存在应用的私有存储目录里。当应用通过应用商店更新时,Android系统只会替换安装包(APK文件),不会清除应用的私有数据(包括SharedPreferences、本地数据库、缓存文件等)。也就是说,首次安装时你已经把isFirst设为true了,更新后这个值依然会保留,所以打开应用时pref.getBoolean("isFirst", false)会拿到true,直接进入else分支,不会执行首次运行的代码块。

你的代码逻辑拆解

咱们再捋一遍这段代码的运行流程:

  • 首次安装打开:SharedPreferences里没有isFirst键,getBoolean返回默认值false,进入if分支,将isFirst设为true,执行首次运行逻辑。
  • 后续重启/更新应用:SharedPreferences里已经有isFirst=true,getBoolean返回true,进入else分支,输出日志,不执行首次逻辑。

如果需要区分「首次安装」和「版本更新」

如果你希望在应用更新时也执行特定逻辑(比如引导用户了解新功能),可以改成存储应用的版本号来判断,示例代码如下:

首先写一个获取当前版本号的方法:

private int getCurrentAppVersion() {
    try {
        PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        return packageInfo.versionCode;
        // 如果你用的是Android API 28及以上,也可以用versionCodeLong来适配更大的版本号
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return 0;
    }
}

然后修改检测逻辑:

public boolean checkFirstRunOrUpdate() {
    SharedPreferences pref = getSharedPreferences("appRunInfo", Activity.MODE_PRIVATE);
    int savedVersion = pref.getInt("lastRunVersion", 0);
    int currentVersion = getCurrentAppVersion();
    
    if (savedVersion == 0) {
        // 这是首次安装应用
        pref.edit().putInt("lastRunVersion", currentVersion).apply();
        // 执行首次安装的专属逻辑
        return true;
    } else if (savedVersion < currentVersion) {
        // 应用从旧版本更新过来了
        pref.edit().putInt("lastRunVersion", currentVersion).apply();
        // 执行版本更新后的专属逻辑(比如展示更新日志)
        return true;
    } else {
        // 既不是首次安装,也不是版本更新
        Log.d("AppRunStatus", "Not first run or app update");
        return false;
    }
}

内容的提问来源于stack exchange,提问作者HEE JAE CHOI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:46