Android按下home键后重新打开app进入主activity的问题
问题阐述:
当我们写一款App的时候,势必会有这种情况:用户已经进行了多级的操作,现返回栈中已存在多个activity,那么这个时候我们想回到最初的activity难道要一层层的返回吗,对用户来说 无疑是一个不好的操作体验,这个时候我们就想到了android的四大启动模式,四大模式的详情请自行查询学习,singleTask就是四大启动模式其中的一个,使用了singleTask模式的activity会在当前的返回栈中有且只有一个实例,当我们需要重新调用这个activity 的时候,并不是new 一个该activity,而是从返回栈中直接调用这个已存在的实例,并将之其上的所有activity清空,保持返回栈中有且仅有其一个activity实例。
那么,说了这么多,与本文有什么关系呢?
先来说一下 我的app需求:第一个activity为登录页,登录后保存用户数据,进入主页,除了修改密码和退出登录外其他操作都应当自动登录,实现用户点击app后 直接进入主页的效果
最初,笔者也是觉得singleTask模式非常的方便,并且没发现什么缺点。but 把apk打包给后端小哥测试的时候,他发现当用户点击home键返回系统桌面的时候,这个时候重新点击启动app会发现,并没有显示关闭之前的那个activity,而是进入了登录页面。这是,笔者第一个想到的是 会不会本地缓存的用户数据被清掉了,感觉去检查了一下,发现用户数据还在。
那是什么问题呢,之后又考虑到会不会是home键按下后,需要做一个home键的监听拦截,但是这样有些得不偿失,因为拦截下来还是得关掉所有的activity。
死来想去,想想数据也在,但是没有自动登录,会不会是查询本地用户缓存数据的方法没有执行到呢?一番排查,发现只有第一次进入app的时候这个验证本地数据的方法才被调用了,之后按下home键后再打开app并不会执行该方法,那么就能解释为什么 按下home键后在进入程序不会自动登录到主页,而是打开登录页了。
可是,为什么没有执行到呢?
解决方案:
想了一下,验证本地数据的方法我是在onCreate()方法中进行调用的,而singleTask启动模式,调用已存在的activity实例却是调用的onNewIntent()方法,那么相对应的在onCreate()中调用的验证本地用户缓存数据的方法势必要在onNewIntent()重新调用一下。果不其然,调整之后,问题解决了。(下面附上 自动登录方法 和onCreate()、onNewIntent()的方法体 )



Android按下home键后重新打开app进入主activity的问题的更多相关文章
- 输入URL按下enter键后发生的事
输入URL按下enter键后浏览器和服务器各自发生的事. 浏览器 1.用户在浏览器中输入URL地址 2.浏览器解析用户输入的URL地址=>域名+端口 3.浏览器检查本地缓存中是否存在这个域名=& ...
- 按下enter键后表单自动提交问题
在HTML的form表单里,按下enter键之后,默认情况下表单会自动提交. 在公司一个项目里,按下enter键自动提交表单的查询结果与按下搜索框的搜索结果页面显示不一样,按下搜索按钮之后是通过Aja ...
- 本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法
情景: 1.下载apk到手机本地,点击本地apk开始安装 2.安装完成后,一般会有 “完成” 和 “打开” 两个按钮,点击 “完成” 按钮时是没有问题的,不管它 3.点击 “打开” 按钮,进入到首页( ...
- 按下home键,重新打开,应用重启
其实不是重启,只是重新打开了luncher的那个activity.只要通过判断把它finish,就会显示按下home键前的页面. 解决方法: 在重启的页面中加入一下代码,注意加在setContentV ...
- android点击返回键,如何做到不destory当前activity,只是stop。重新返回该activity的 时候可以直接使用,不需要创建新的activity实例
问题描述,如题目: android点击返回键,顺序执行 pause,stop,destory. 以至于想重新进入这个activity的时候还要重新执行onCreate()方法,那么如何解决不再重新执行 ...
- Android 按下home键,程序在后台运行,在设置中点击程序的启动时,会再次打开启动页的解决办法
在onCreate()方法中增加如下代码即可: if (!isTaskRoot()) { finish(); return; }
- 用户从地址栏输入url,按下enter键后,直到页面加载完成的这个过程都发生了什么?
流程大概描述一下: 用户将url输入后,服务器接受到请求,然后将这个请求进行处理,然后将处理后的结果返回给浏览器,浏览器将该结果以页面的形式呈现给用户. 详细描述: 1:用户将url(例如www.ba ...
- Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏
之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页.直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量 ...
- Android应用Home键后Launcher重复启动问题
通过系统方式(系统安装器)安装应用,点击"打开"按钮,进入应用主界面,按home键后,点击应用图标进入,应用会出现重新启动.当完全退出应用后,再通过启动图标进入应用,便不会出现重复 ...
随机推荐
- DNS查询的工作原理
二.DNS查询的工作原理 1.DNS查询过程按两部分进行 1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析 2.如果不能再本机解析查询, 可根据设定的查询DN ...
- 1.QT开发第一个程序
Ubuntu16.04安装QT5.8.0:http://www.cnblogs.com/dotnetcrazy/p/6725945.html QT5.8支持中文输入法(附带老版本的解决+不理想的情况解 ...
- java调优(一)
- C# Excel数据导入到数据库
http://www.jb51.net/article/44743.htm 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码: 复制代码 代码如下: using System ...
- 微信小程序开发之普通链接二维码
本文主要介绍扫普通链接二维码打开小程序, 详情请看官方文档https://mp.weixin.qq.com/debug/wxadoc/introduction/qrcode.html 配置普通链接二维 ...
- android散点技术
1.怎么实现android虚拟按键(回退和回到主界面) android 中如何模拟back键 2.怎么用局域网的方式(wifi或是网线)来调试android机 参考资料: http://www.ith ...
- 你知道BFC、IFC、FFC、GFC及多栏自适应布局吗?
FC(Formatting Context)格式化内容,常见的FC有BFC.IFC.FFC.GFC四种类型,BFC和IFC是W3C CSS2.1规范提出的概念,FFC和GFC是W3C CSS3规范提出 ...
- 2017 年的 人生 hard 模式终于结束了,2018年回归初心
2017 年的 人生 hard 模式终于结束了,2018年回归初心 2017年对于我个人来讲, 毫不夸张的说 算是近十年来除了高考那一年,最最惊心动魄的一年了,没有之一. >>>开篇 ...
- 解决Fiddler出现无线弹框 "creation of the root certificate was not successful”的问题
打开Fiddler 访问:http://localhost:8888/ 安装证书,如果提示没有证书(8888是你在Tool->Fiddler Option->Connections设置的F ...
- 基于springboot的freemarker创建指定格式的word文档
在web或其他应用中,经常我们需要导出或者预览word文档,比较实际的例子有招聘网站上预览或者导出个人简历,使用POI导出excel会非常的方便,但是如果想导出word,由于其格式控制非常复杂,故而使 ...