本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法
情景:
1、下载apk到手机本地,点击本地apk开始安装
2、安装完成后,一般会有 “完成” 和 “打开” 两个按钮,点击 “完成” 按钮时是没有问题的,不管它
3、点击 “打开” 按钮,进入到首页(比如MainActivity),打开其他页面(比如GameActivity),然后按下Home键
4、返回桌面后,再次点击桌面上的app图标
- 我们的期望是:重新打开app之后,应该能看到 GameActivity 页面
- 然而事实是:重新打开app之后,展示的是 MainActivity,当点击返回时,才看到GameActivity。也就是说,重新启动应用后,之前的页面也没有被kill掉,相当于打开了两个相同的应用。第一感觉就是 onCreate() 方法被反复调用,onResume() 没发挥作用。
解决方法:
网上都是说将第二个页面的launchMode属性设置为singleTask,比如说有两个页面,第一个是登录界面,第二个为主界面,将主界面的启动模式设置为singleTask,这样虽然按照之前的操作流程,在第二次打开应用,进到主界面的时候,只有一个,但是这样每次都要到登录界面再到主界面,情况虽然有所改善,但还是没有完美解决。
下面介绍一种比较好的处理方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int flag=getIntent().getFlags();
System.out.println("getFlags---"+flag+"------"+(flag&Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
}
在手机上按照情景描述那样操作,能看到下面的输出。第一行表示正常打开时 flag 标志是268435456,Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 标志是0;第二行表示重新打开app的结果,很明显 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 标志不再是0,所以我们在setContentView()之前直接finish掉它或者执行onResume()方法来恢复之前的页面。

另外也可以检查一下另一个标志:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。这个没使用过,没什么体会,仅供参考吧!
参考资料:How to return to the latest launched activity when re-launching application after pressing HOME
本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法的更多相关文章
- 本地安装Mysql后,navicat链接异常:Clinet dose not support authentication protocol request by server ; consider upgrading MySQL client
第一步:首先通过cmd进入mysql 在命令窗口 输入:mysql -u root -p: 第二步:更改加密方式 mysql> ALTER USER 'root'@'localhost' IDE ...
- mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思
[windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...
- eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法
进入项目包下的.settings目录,找到org.eclipse.wst.common.project.facet.core.xml文件,用记事本打开后才发现这句话有问题:<runtime na ...
- wordpress设置“固定链接”后,页面404错误的解决方法
Nginx 解决方案: 网上盛传的方法是: 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.htm ...
- 本地安装discuz
出处:http://jingyan.baidu.com/article/b87fe19eb57ff252183568d9.html 网站建目前都很简单,建站容易,管理难,网站做大优化更难.本人有建站经 ...
- Discuz建站教程:本地安装discuz网站
网站建目前都很简单,建站容易,管理难,网站做大优化更难.本人有建站经验,目前给大家分享一下如何建站,当然,目前使用的是本地建站,因为非本地建站需要购买域名和网站空间,当然,朋友们想真正建站的,对于一些 ...
- 多设备同时安装apk问题(安卓)
前几天在做安卓设备的多个设备同时安装的小脚本.因为目前我这边设备有点多,想顺便做一下安装的测试.而且因为本人负责公司所有的app测试人手上有点不足,就想通过这个办法去在安装的时候更方便省事一点. 本来 ...
- phpcms安装完成后总是跳转到install/install.php
很多人在本地安装phpcms后总是跳转到install/install.php.由于很多人是第一次使用phpcms,不知道为何会出现这个错误.出现这个大都是phpcms的缓存所致. 如何解决ph ...
- adb安装apk
1. 安装配置 1.1安装包 下载adb.zip,解压至本机 1.2环境配置 将adb安装路径加入path中 2. 安装apk 使用数据线将Android手机与电脑连接,打开手机usb调试 ...
随机推荐
- C. Permutation Cycle
For a permutation P[1... N] of integers from 1 to N, function f is defined as follows: Let g(i) be t ...
- abp 模块系统
abp模块系统:ABP理论学习之模块系统 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是一个模块.一个模块是由一个派生了AbpM ...
- [Jxoi2012]奇怪的道路 BZOJ3195 状压DP
分析: k很小,可以状压. f[S][i]表示状态S表示在i之前k+1个中点的边数奇偶情况 之后转移的时候,S的最后一位不能为1 附上代码: #include <cstdio> #incl ...
- C/C++函数调用方式
__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以 ...
- 大数据入门第十六天——流式计算之storm详解(二)常用命令与wc实例
一.常用命令 1.提交命令 提交任务命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称] torm jar examples/storm-starter/storm-st ...
- WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据
XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- [Deep-Learning-with-Python]基于Keras的房价预测
预测房价:回归问题 回归问题预测结果为连续值,而不是离散的类别. 波士顿房价数据集 通过20世纪70年代波士顿郊区房价数据集,预测平均房价:数据集的特征包括犯罪率.税率等信息.数据集只有506条记录, ...
- STM32之HAL库、标准外设库、LL库
标准外设库(Standard Peripherals Library),应该是最早推出的版本,以前用STM32F103的时候,用的多 HAL(Hardware Abstraction Layer),硬 ...
- springtest mapper注入失败问题解决 {@org.springframework.beans.factory.annotation.Autowired(required=true)}
花费了一下午都没有搜索到相关解决方案的原因,一是我使用的 UnsatisfiedDependencyException 这个比较上层的异常(在最前面)来进行搜索, 范围太广导致没有搜索到,而且即便是有 ...
- jvm系列(九):Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演. 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之 ...