android程序按home切换到后台,点击launcher的图标切换到前台,当前页面退出回到启动页
问题:
在一次app测试中,偶然发现打开项目按下home键,回到桌面,再次点击app图标,进入app,切换之前的页面突然退出,回到了首页,开始以为是该页面出现bug崩溃了,查看日志,并未发现错误日志,于是在页面的生命周期方法中,写上log,再次重复了上述操作,进入app后,页面一样的退出,查看log,当前页执行Resume()方法后,再次执行了Destroyed()方法,切换了其他页面,发现都会退出,于是在Application文件中的onCreate()中,监听所有页面的生命周期,方法如下:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityStopped(Activity activity) {Log.v("viclee", activity + "onActivityStopped");count--;if (count == 0) {Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到后台 lifecycle");}}@Overridepublic void onActivityStarted(Activity activity) {Log.v("viclee", activity + "onActivityStarted");if (count == 0) {Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到前台 lifecycle");}count++;}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {Log.v("viclee", activity + "onActivitySaveInstanceState");}@Overridepublic void onActivityResumed(Activity activity) {Log.v("viclee", activity + "onActivityResumed");}@Overridepublic void onActivityPaused(Activity activity) {Log.v("viclee", activity + "onActivityPaused");}@Overridepublic void onActivityDestroyed(Activity activity) {Log.v("viclee", activity + "onActivityDestroyed");}@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {Log.v("viclee", activity + "onActivityCreated");}});
再次执行后台切换前台操作,发现打印的日志如下:
发下启动页(WelcomeActivity)竟然启动了,当前页执行了退出操作(Destroyed)。
原因:
app启动的过程有两种情况,第一种是从桌面launcher上点击相应的应用图标,第二种是在activity中通过调用startActivity来启动一个新的activity。上述的问题,刚好属于第一种,启动情况,当我们点击应用图标的时候,会重新启动app,启动新的堆栈,清除之前的堆栈,所以之前开启的页面都会被清除。
解决方法:
在启动页的onCreate()方法中加入:
if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){finish();return;}
因为启动每一个activity会在intent中设置一个flag,详情需要了解app的启动过程。
设置之后再看下生命周期的log:
发现启动页再次启动后,立即执行Destroyed方法,return阻止了后续的操作,也就保留了当前页的显示状态。
android程序按home切换到后台,点击launcher的图标切换到前台,当前页面退出回到启动页相关推荐
- Android开发之最简单的布局点击Tab和Fragment切换源码(特别适合初学者)
老套路看效果图: 说实话这个布局实现的思路太多了,自己写以及第三方都特别多,不过对于初学者还是从一点一滴开始学起比较简单也容易理解.直接上源码吧,我这个是用的最新的AndroidX库和Kotlin写的 ...
- java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现
将 Android 程序切换到后台及从后台切换到前台实现 有时候, 我们需要将自己的 Android 程序切换到后台运行, 在必要时, 将其切换到前台运行下面提供了一种实现方式, 首先需要引用三个单元 ...
- android程序怎么执行,电脑怎么运行安卓手机程序【详细介绍】
电脑怎么运行安卓手机程序? 我们都知道安卓手机程序在手机在运行很好,但是如果有时候我们不想在手机上运行,想在电脑上运行又该怎么办呢? 下面,我们就以支付宝钱包为例来模拟运行吧. 1.首先下载最新版的B ...
- eclipse运行Android程序报错,找不到adb.exe或要你重启eclipse的解决方法
这几天打开eclipse准备运行Android程序,一开始好好的,之后像大姨妈一样的,说来就来,老是启动报错Cannot run program "D:\computer master\an ...
- 记录winform 点击单元格自动切换英文输入法的问题
这里写自定义目录标题 点击单元格直接切换英文输入法 点击单元格直接切换英文输入法 问题现象:启动winfrom点击单元格或其他单元格时输入法自动变更为英文,但这一现象不是所有电脑才有,个别电脑也会按照 ...
- 解决 Android APP 启动页白屏问题及如何实现全屏显示
目录 一.白屏原因分析 二.解决白屏方案 方案一.提供 .png 背景图 方案二.使用 Layout-list 制作背景 1. 制作替代白屏的背景:bg_splash.xml 2. 将 bg_spl ...
- android 加载图片 白屏,android启动页白屏和图片自适应问题
android启动页白屏和图片自适应问题,自适应官方给的说法也只是做多套图去适配不同的分辨率,本文通过几个设置几行代码即可解决启动页短暂白屏和自适应问题. 网上的说法是通过启动页代码裁切图片或者在Im ...
- qt for android程序保活 程序后台一直运行不被清理掉(未完)
本博主要就是分享如何让qt开发的android程序在手机上运行,切换到后台的时候,程序仍然在一直运行,为什么这么做呢,因为我有需求是app连接蓝牙后,程序切换到后台,仍然能接受到蓝牙发送的数据并保存时 ...
- Android 程序后台运行和锁屏运行
Android 后台服务保活 需求 方案 推广一下我的个人博客小站: Z同学 期待大家的围观 需求 1.在华为手机中应用切换到后台后,打开其他app.需要我的应用后台仍然能够访问http,传输数据. ...
最新文章
- lpc3250 TFT-4238液晶支持
- 虚拟机 fedora 18 服务器,VM虚拟机中的Fedora设置固定IP上网的方法
- Android:获取最近打开app列表
- 基于麻雀搜索的PID神经网络解耦控制算法 - 附代码
- mysql权限查看_教您如何查看MySQL用户权限
- 框架的配置文件的映射机制
- 海康sdk java_java调用海康sdk案例
- 集成DC电源RS485/422收发器数字隔离芯片CA-IS309X
- vue slideup_像jQuery的slideUp / slideDown一样,但是对于Vue
- PHPWord Beta 0.6.2 开发者指南
- 为什么我的程序中没有stdafx.h头文件?
- SQLITE3插入、查询效率的优化方法
- FusionCharts的基本使用(3)
- 腾讯微服务框架 Tars 的 Go 性能提升之路
- mysql cache lock_mysql服务器上有sql状态status显示 Waiting for query cache lock?
- 生物发光及化学发光的原理及其应用
- 业务需求近期准备深度学习下SpringCloud为加深印象提高学习效果故做此笔记以备后面复习查看之用
- 【C++】C/C++内存管理
- 7-1 IP地址转换 (20分)PTA
- 简单Android app之 一键签到 开发日记