Android:APP版本升级后不显示Splash引导画面
在常规APP设计中,Splash引导画面一般是APP安装后第一次启动展现给用户的。
在是否显示的控制上,个人来说一般用Sharepreference保存一个是否启动过的key-value,以后在启动APP的时候,以后取key对应的value就可以了。
但新版本的APP安装后,因为我们保存了用户之前的数据,也就是Sharepreference中保存的APP是否启动过的key-value也还是存在的。这种情况下,新版本的Splash引导画面就不会被显示出来了。
基于上述背景,我们就要对新版本的Sharepreference保存用的key重新修改,也就是重新换个新的key,以后就用这个新的key来取value做判断。
上面说到的每次发布新版本重新修改key的方式虽然可行,但修改代码无疑带来了每次版本升级的麻烦。
因为是版本升级时出现的问题,所以我考虑到可以使用APP的版本号作为key的一部分,这样就省去了每次版本升级都要修改代码的问题。
下面是参考代码:
public static void setAPPStartedToSP(Context context) { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sp.edit(); String currVersion = getVersionName(context); editor.putBoolean(APP_START_KEY + currVersion, true); editor.commit(); }
public static boolean hasAPPStarted(Context context) { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(context); String currVersion = getVersionName(context); return sp.getBoolean(APP_START_KEY + currVersion, false); }
private static String getVersionName(Context context) { // getPackageName() returns current package name, 0:version info PackageManager packageManager = context.getPackageManager(); PackageInfo packInfo; try { packInfo = packageManager.getPackageInfo(context.getPackageName(), 0); return packInfo.versionName; } catch (NameNotFoundException e) { e.printStackTrace(); return ""; } }
这样在SplashActivity中调用hasAPPStarted()判断即可。
文末,有问题欢迎指正,有更好的方法欢迎提出。