问题阐述:

  当我们写一款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的问题的更多相关文章

  1. 输入URL按下enter键后发生的事

    输入URL按下enter键后浏览器和服务器各自发生的事. 浏览器 1.用户在浏览器中输入URL地址 2.浏览器解析用户输入的URL地址=>域名+端口 3.浏览器检查本地缓存中是否存在这个域名=& ...

  2. 按下enter键后表单自动提交问题

    在HTML的form表单里,按下enter键之后,默认情况下表单会自动提交. 在公司一个项目里,按下enter键自动提交表单的查询结果与按下搜索框的搜索结果页面显示不一样,按下搜索按钮之后是通过Aja ...

  3. 本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法

    情景: 1.下载apk到手机本地,点击本地apk开始安装 2.安装完成后,一般会有 “完成” 和 “打开” 两个按钮,点击 “完成” 按钮时是没有问题的,不管它 3.点击 “打开” 按钮,进入到首页( ...

  4. 按下home键,重新打开,应用重启

    其实不是重启,只是重新打开了luncher的那个activity.只要通过判断把它finish,就会显示按下home键前的页面. 解决方法: 在重启的页面中加入一下代码,注意加在setContentV ...

  5. android点击返回键,如何做到不destory当前activity,只是stop。重新返回该activity的 时候可以直接使用,不需要创建新的activity实例

    问题描述,如题目: android点击返回键,顺序执行 pause,stop,destory. 以至于想重新进入这个activity的时候还要重新执行onCreate()方法,那么如何解决不再重新执行 ...

  6. Android 按下home键,程序在后台运行,在设置中点击程序的启动时,会再次打开启动页的解决办法

    在onCreate()方法中增加如下代码即可: if (!isTaskRoot()) {  finish();  return;  }

  7. 用户从地址栏输入url,按下enter键后,直到页面加载完成的这个过程都发生了什么?

    流程大概描述一下: 用户将url输入后,服务器接受到请求,然后将这个请求进行处理,然后将处理后的结果返回给浏览器,浏览器将该结果以页面的形式呈现给用户. 详细描述: 1:用户将url(例如www.ba ...

  8. Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏

    之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页.直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量 ...

  9. Android应用Home键后Launcher重复启动问题

    通过系统方式(系统安装器)安装应用,点击"打开"按钮,进入应用主界面,按home键后,点击应用图标进入,应用会出现重新启动.当完全退出应用后,再通过启动图标进入应用,便不会出现重复 ...

随机推荐

  1. 学习时用的软件最新 开发环境为Visual Studio 2010,数据库为SQLServer2005,使用.net 4.0开发。 超市管理系统

    一.源码特点 1.采用典型的三层架构进行开发.模板分离,支持生成静态 伪静态..购物车.登陆验证.div+css.js等技术二.功能介绍 1.本源码是一个超市在线购物商城源码,该网上商城是给超市便利店 ...

  2. php 理解

    <?php class t { var $num; var $dynamic_function; public function dynamic_function() { $func = $th ...

  3. sql sever基本查询语句

    查询(*可代表全部)(<>代表不等于于)select 列名 from 表名(,隔开)where 查询条件order by 排序的列名+连接的数据类型必须兼容(结果为字符串数据的连接 , 如 ...

  4. 关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结

    关于dl  dt dd 文字过长换行在移动端显示对齐的探讨总结 <dl> <dt>抵押房产:</dt> <dd>1.北京市大兴区兴华大街丽园小区3单大兴 ...

  5. css布局--水平垂直居中

    1. 使用text-align 和 vertical-align 和 inline-block实现水平垂直居中 html <div class="parent"> &l ...

  6. css布局--垂直居中

    1. 使用table-cell和vertical-align实现垂直居中 html <div class="parent">使用table-cell和vertical- ...

  7. IE下javascript cookie path设置Bug

    项目中设置完cookie,在Firefox下顺利测试通过.IE测试出现问题,经定位发现是Javascript设置 Cookie 时的 path 有问题.IE下Cookie设置在 /或者URL所在路径时 ...

  8. 用mint ui去实现滚动选择日期并可以关闭拾取器

    转发要备注出处哈,么么哒 注释的那些部分都是我在尝试的时候写得,留给自己看得,删除不影响效果哈,希望对你们有帮助,比较忙可能写得很粗糙,不好意思,有空再改了 实例一:   <template&g ...

  9. Pyqt4的对话框 -- 文件对话框

    文件对话框允许用户选择文件或文件夹,被选择的文件可进行读或写操作 # QInputDialog 文件对话框 # 本示例包含一个菜单栏,一个状态栏和一个被设置为中心部件的文本编辑器. # 状态栏的状态信 ...

  10. replace into 浅析之一

    一 介绍  在笔者支持业务过程中,经常遇到开发咨询replace into 的使用场景以及注意事项,这里做个总结.从功能原理,性能和注意事项上做个说明.二 原理2.1 当表中存在主键但是不存在唯一建的 ...