情景:

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键再重新打开,然后按下返回键时页面展示错误的处理方法的更多相关文章

  1. 本地安装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 ...

  2. mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思

    [windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...

  3. eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法

    进入项目包下的.settings目录,找到org.eclipse.wst.common.project.facet.core.xml文件,用记事本打开后才发现这句话有问题:<runtime na ...

  4. wordpress设置“固定链接”后,页面404错误的解决方法

    Nginx 解决方案: 网上盛传的方法是: 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.htm ...

  5. 本地安装discuz

    出处:http://jingyan.baidu.com/article/b87fe19eb57ff252183568d9.html 网站建目前都很简单,建站容易,管理难,网站做大优化更难.本人有建站经 ...

  6. Discuz建站教程:本地安装discuz网站

    网站建目前都很简单,建站容易,管理难,网站做大优化更难.本人有建站经验,目前给大家分享一下如何建站,当然,目前使用的是本地建站,因为非本地建站需要购买域名和网站空间,当然,朋友们想真正建站的,对于一些 ...

  7. 多设备同时安装apk问题(安卓)

    前几天在做安卓设备的多个设备同时安装的小脚本.因为目前我这边设备有点多,想顺便做一下安装的测试.而且因为本人负责公司所有的app测试人手上有点不足,就想通过这个办法去在安装的时候更方便省事一点. 本来 ...

  8. phpcms安装完成后总是跳转到install/install.php

       很多人在本地安装phpcms后总是跳转到install/install.php.由于很多人是第一次使用phpcms,不知道为何会出现这个错误.出现这个大都是phpcms的缓存所致. 如何解决ph ...

  9. adb安装apk

    1.    安装配置 1.1安装包 下载adb.zip,解压至本机 1.2环境配置 将adb安装路径加入path中 2.    安装apk 使用数据线将Android手机与电脑连接,打开手机usb调试 ...

随机推荐

  1. Kafka设计解析(二十三)关于Kafka监控方案的讨论

    转载自 huxihx,原文链接 关于Kafka监控方案的讨论 目前Kafka监控方案看似很多,然而并没有一个“大而全”的通用解决方案.各家框架也是各有千秋,以下是我了解到的一些内容: 一.Kafka ...

  2. JavaScript中的箭头函数

    1.定义 箭头函数相当于匿名函数,并且简化了函数定义.箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ ... }和return都省略掉了.还有一种可以包含多条语句,这时候就不能省略{ ... ...

  3. DW 破解方法

    安装破解方法(断网破解): 开始先请先断开网络连接,断网!!! 1.软件下载完成后,打开软件包如上图4个文件(第1个是安装文件夹,第2个是汉化包,第3个是破解文件,第4个是hosts修改工具). 打开 ...

  4. 计算机视觉-sift(2)代码理解

    之前结合不同人的资料理解了sift的原理,这里通过opencv中的代码来加深对sift的实现的理解. 使得能够从原理性理解到源码级的理解.不过该博文还是大量基于<赵春江, opencv2.4.9 ...

  5. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  6. Git与TortoiseGit基本操作

    Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...

  7. Android应用安全之脆弱的加密

    程序员希望通过加密来提升程序的安全性性,但却缺乏专业的密码学背景知识,使得应用对数据的保护非常薄弱.本文将介绍可能出现在Android应用中的一些脆弱的加密方式,以及对应的攻击方法. 造成脆弱加密的主 ...

  8. WPF Good UI

          <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.co ...

  9. [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]

    题意 给你一棵树,你要用不超过 \(D\) 的权值给每个节点赋值,保证一个点的权值不小于其子节点,问有多少种合法的方案. \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) ...

  10. 设计模式 笔记 策略模式 Strategy

    //---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...