清除应用数据后首次启动异常求助(PiracyChecker相关)
解决方案
问题根源
PiracyChecker的start()方法是异步执行的。首次清除应用数据后,onResume方法会在PiracyChecker完成检查并写入SharedPreferences之前触发,此时pref3还是默认值false,导致跳转逻辑不执行,闪屏界面一直停留。第二次启动时,SharedPreferences已经保存了上次的检查结果,所以onResume能正常触发跳转。
修复方案
改用PiracyChecker回调监听处理跳转
放弃在onResume中读取SharedPreferences的方式,直接通过PiracyChecker的回调接口在检查完成后执行跳转,确保时机准确。修改后的代码如下:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); new PiracyChecker(this) .addAppToCheck(apps) .enableGooglePlayLicensing(BuildConfig.LICENSE) .enableInstallerId(InstallerID.GOOGLE_PLAY) .enableUnauthorizedAppsCheck() .blockIfUnauthorizedAppUninstalled("pref1","pref2") .enableStoresCheck() .enableFoldersCheck() .enableEmulatorCheck(false) .enableDebugCheck() .display(Display.ACTIVITY) .saveResultToSharedPreferences("pref1", "pref3") .callback(new PiracyCheckerCallback() { @Override public void allow() { // 检查通过,跳转主页面 startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } @Override public void dontAllow(@NonNull PiracyCheckerError error) { // 检查不通过,处理盗版情况(比如显示提示后退出) finish(); } }) .start(); } // 移除onResume中的SharedPreferences检查逻辑 @Override protected void onResume() { super.onResume(); // 不再需要这里的跳转逻辑 }优化闪屏体验
在闪屏布局activity_splash.xml中添加加载动画或提示文字(比如"正在验证..."),让用户感知到App在运行,避免误以为界面冻结。检查PiracyChecker配置合理性
确认blockIfUnauthorizedAppUninstalled的参数是否符合需求,该方法会在未授权应用被卸载时阻止跳转,若配置不当可能导致不必要的阻塞。
内容的提问来源于stack exchange,提问作者Mahmoud Mohsen
相关产品推荐
相关产品推荐

