解决APK安装成功后点击"打开"再按Home键遇到的问题

本文介绍了解决Android应用在更新后启动时出现问题的方法,包括如何避免应用重启及保持后台连接,确保用户操作流畅。


问题描述:

       安装系统SD卡里面的apk或者原有的程序更新版本的时候,会遇到升级安装成功之后的一个选择——“打开”和“完成”,点击完成没有问题,但是,如果点击了"打开",然后按Home键,从应用程序列表里面选择应用程序图标进入,这个时候就会重新启动了一个应用程序,之后的操作就会出现混乱等问题。

       困扰了我很久,由于我的登陆页面会和server建立长链接,而按home键链接不会断开,方便我在后台更新数据。现在每次从home回到我的application就会重新尝试去连server,从而建立起不止一个链接。


解决方法:

        在网上找了很久的资料,把launchMode改称singleTop, singleTask完全没有效果;监听apk安装事件更是扯淡;restartPackage的方法在很多android版本中不能用。其实处理方法很简单,虽然会有一点瑕疵-------禁用安装完成后的“打开”按钮。当然,写插件去改android系统,但是毕竟是启动我们的应用,我们只要自动关闭第一次打开应用程序的操作。


在应用程序登陆页面启动之前加入以下代码:

        String version = getEmmaApplication().getVersion();
        SharedPreferences sharedPreferences = getSharedPreferences("userInfo", Context.MODE_PRIVATE); 
        String versionStore = sharedPreferences.getString("version", ""); 
        Editor editor = sharedPreferences.edit();
        editor.putString("version", version);      
        editor.commit();
        if (!version.equals(versionStore)) {
        	ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
        	am.restartPackage(getPackageName());
        	finish();
		}

即在文件系统中保存当前版本号,每次更新之后,检查新版本和当前版本号,如果不同表示更新过程序,那么第一次启动只做一件事情,就是更新文件系统里的版本号,然后直接关闭。这样第二次启动就能顺利进入。这个过程很快,用户不会感觉太多异常,点击“打开”按钮立刻就会返回下载页面。此时,已经没有“打开”和“完成”两个选项,用户回到主界面启动application,一切正常。



Android 12及以上版本中,Home应用(即启动器App)通常会有一些安全限制,防止第三方应用程序直接重启。如果发生崩溃,常规操作通常是用户需要手动打开设置、清理应用数据或者通过系统恢复手段。 然而,如果你想在后台尝试一种间接的方式来处理这种情况,可以考虑以下几个步骤: 1. **异常捕获与记录**: 在你的APK内部,当启动服务或者活动时,添加异常处理机制,捕捉并记录崩溃信息。例如,你可以使用`try-catch`块,并利用`HandlerThread`或者`UncaughtExceptionHandler`来记录错误日志。 ```java try { // 你的业务代码 } catch (Exception e) { Log.e("MyAppName", "Crash occurred: ", e); } ``` 2. **自愈策略**: 如果可能的话,你可以设计一个简单的自愈机制,在遇到异常后暂停一段时间(比如5分钟),然后尝试重启。这需要在定时任务或者服务中实施。 ```java ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(() -> { try { startYourServiceOrActivityAgain(); } catch (Exception ex) { Log.wtf("RecoveryFailed", "Failed to recover, exiting.", ex); } }, recoveryDelay, recoveryInterval, TimeUnit.MINUTES); ``` 注意:这种做法可能会因为频繁重启而影响用户体验,所以需要合理设置间隔时间。 3. **通知用户**: 提供一个友好的提示给用户,告知他们应用已崩溃并且正在尝试自动修复。这可以通过显示Toast消息或者推送通知来完成。 4. **权限管理**: 确保你的应用获得了适当的权限,如读取日志文件或发送通知。这取决于你的应用需要做什么才能自我恢复。 **重要提示**: 需要注意的是,上述步骤应该在遵守Google Play政策的前提下进行,尤其是关于自动重启服务隐私方面的考虑。此外,Home应用的特殊地位意味着某些操作可能受到限制,因此不一定能在所有情况下生效。如果你的应用非常重要,建议联系Google Play团队获取专业指导。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值