安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法
安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法
在开发中我们一般都是直接AS上的安装(Run)按钮,直接安装到真机或模拟器上进行测试,但是当发布时就要先打包,再拷贝安装。如题目中的描述,这个问题在平时Debug的时候并不存在,只有发布正式版的时候才会出现,(尼玛,隐藏的挺深啊!可坑了我了!)
你还在为开发中频繁切换环境打包而烦恼吗?快来试试 Environment Switcher 吧!使用它可以在app运行时一键切换环境,而且还支持其他贴心小功能,有了它妈妈再也不用担心频繁环境切换了。https://github.com/CodeXiaoMai/EnvironmentSwitcher
开始发现这个问题,我以为是app被系统kill了,但是经过我多次调试与分析,发现当打开app后,再按home键回到桌面时,这时不点击app图标,而是启动任务列表,从任务列表中恢复app,就不会出现这个问题,所以排除了被系统kill的因素。
经过与同事讨论,与上网搜索,终于找到了问题的原因和解决办法。
原因分析:这篇文字分析的比较详细:http://www.cnblogs.com/net168/p/5722752.html
主要原因是:每次启动Intent导致新创建Task的时候,该Task会记录导致其创建的Intent;而如果后续需要有一个新的与创建Intent完全一致(完全一致定位为:启动类,action、category等等全部一样,不可多项也不可缺少),那么该Intent并不会触发Activity的新建启动,而只会将已经存在的对应Task移到前台;这也就是为什么桌面会在再次点击图标时将后台任务挪到前台而不是重新启动App的实现。
解决办法:
在启动页的Activity中的 onCreate()方法做处理
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 避免从桌面启动程序后,会重新实例化入口类的activityif (!this.isTaskRoot()) { // 判断当前activity是不是所在任务栈的根Intent intent = getIntent();if (intent != null) {String action = intent.getAction();if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {finish();return;}}} }
如果启动页为SplashActivity,之后finish掉启动MainActivity,解决办法:将MainActivity的launchMode设置为“singleTask”
<activityandroid:name=".activity.StartActivity"android:screenOrientation="portrait"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter> </activity> <activityandroid:name=".activity.MainActivity"android:launchMode="singleTask"android:screenOrientation="portrait" />
安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法相关推荐
- Android安卓开发基础-apk安装包的创建及发布安装
创建日期:公元2022年02月23日 修改日期:2022-10-02 文章状态:已完结 平台:Windows7 + Bunblebee 2021.1.1版AS 适用于:Android-apk ---- ...
- Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法...
最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B ...
- 使用nsis制作的安装包安装后,无法卸载干净的问题
使用nsis制作的安装包安装后,在安装目录下会生成uninst.exe文件,如下图所示. 我们可以通过执行该uninst.exe程序删除已经安装的软件,也可以在控制面板中删除该软件.但有时候我们通过这 ...
- PB安装包,PB安装程序,PB开发工具,powerbuilder安装包,powerbuilder安装程序,powerbuilder开发工具下载地址
B安装包,PB安装程序,PB开发工具,powerbuilder安装包,powerbuilder安装程序,powerbuilder开发工具下载地址 如果不能打开请复制网址粘贴到浏览器中 http://p ...
- Visual Studio 2015 安装过程中出现“安装包丢失或损坏”错误的解决方法
Visual Studio 2015 下载链接: 由于官网实在是太慢了,而且有时候还打不开下载页面,所以我这里贴出了链接,大家可以使用迅雷下载(速度杠杠的) 链接:ISO镜像文件 安装方法: 将ISO ...
- 【Windows】怎么查看CUDA版本?Conda命令安装和NVIDIA官网安装包安装的CUDA有何区别?nvcc -V和nvidia-smi获得的CUDA版本有何区别?如何指定CUDA版本?
一.如何查看CUDA版本? 1.1 查看runtime版本的CUDA (1)nvcc -V或nvcc --version (2)在CUDA的include文件夹中找到cuda.h文件 打开后搜索ver ...
- 用msi安装包安装MySQL详细步骤
用mis安装比用压缩包要好得多,压缩包没有控制台,msi自带连接vs和python的插件,而且不用配置环境和cmd输入一堆命令 MySQL针对不同的用户提供了2中不同的版本: MySQL Commun ...
- windows安装包安装mysql5.7_Windows server 2008 r2上安装MySQL5.7.10步骤
用MSI安装包安装 根据自己的操作系统下载对应的32位或64位安装包.按如下步骤操作: 第一步:安装许可 双击安装文件,在如下图所示界面中勾选"I accept the license te ...
- 阿里云Redis (安装包安装篇)
2019独角兽企业重金招聘Python工程师标准>>> 之前通过yum安装Redis,挺简单的:这次来试试安装包安装! 一.天才第一步,***** 找个安装包吧,直接到官网下载.ht ...
最新文章
- python处在哪个阶段_python 基础复习
- 新上市Lighthouse专用芯片TS3633规格介绍
- 【软考】 2019年上半年软件设计师考试上午真题(专业解析+参考答案)
- python一步将npy数据保存成mat
- chrome无法拖拽离线安装CRX格式插件解决方法
- [运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
- Linux开发:error: ‘clockid_t’ has not been declared
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- 第二季-专题20-移植bootm命令启动内核
- HTTP协议之Content-Encoding - 天下无贼 - 51CTO技术博客
- 基于电子商务网站开发的项目管理计划设计
- lumaqq receiver
- Unity学习笔记--无限地图(地图拼接)
- SpringBoot+Vue本地实现微信公总号web端的微信登录获取用户信息,前后端分离
- 域名过期导致的问题-研究DNS相关知识
- 【饭谈】【超详细】的资深测开的招聘要求,大家看看这符合了值多少钱?
- ML - 分类算法的评价
- 1. 系统符号与正则符号
- [xsy3553]游戏
- python中什么是参数_Python中**和*参数有什么用