Android Activity打开后被应用快照遮住的问题

为公司的银联二维码功能增加一个桌面快捷方式功能的时候,遇到一个头疼的问题,问题如下:

测试来回切换app主界面的四个tab,然后点击home键,点击桌面快捷方式,概率性出现银联二维码界面被主界面快照遮盖。

现象(银联二维码界面被主界面快照遮盖后):

1.进入最近任务栏,发现最近任务栏中的快照也是主界面的Activity, 也是错误的。

2.通过adb查看任务栈信息,发现任务栈信息是正常的,银联二维码界面确实是在HomeActivity上面的,只是被应用快照遮住了。

3.页面点击事件

响应的是银联二维码页面的点击事件。

4.页面进入后台,重新打开

onStop->onRestart->onStart->onResume 银联二维码页面恢复。

为什么会有快照?

在Activity启动的前期准备阶段,会借助PMS,确认需要启动的Activity,并对intent、权限等进行验证,同时根据launcheMode和flag配置 task,这时候通过加载快照(预览窗口)进行过渡,提升用户体验。

当按下home键, framework会存下一个应用的快照,快照可以通过taskId获取,当应用从后台进入前台时,会先显示快照,再开始执行当前Activity的生命周期方法。 在执行ActivityStack执行startActivityLocked的时候,通过ActivityRecord的showStartingWindow方法开始正式进入starting window的显示流程。

当然跳转到银联二维码的方式是调用基础封装的方法。

问题原因:

快照销毁失败。 应用进入前台触发了绘制快照,但是销毁快照失败了。

ActivityStack.java

最终修改方案:

对跳转到银联二维码界面的跳转方法延时500毫秒,保证主界面HomeActivity 组件初始化完毕,从而成功销毁快照。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android获取照片的快照 思路及实现方法

    当我们在做相册.上传相关的应用的时候需要获取图片的快照,这时候就需要获取图片的快照. android中专门有一个BitmapFactory类可以来处理这类需求. 实现的步骤如下: 1.首先解析出图片文件(注意在这里为了节约内存将inJustDecodeBounds设为true,这样的话解析的图片的话只有图片的尺寸大小信息) 复制代码 代码如下: BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();bmpFac

  • Android 动态加载二维码视图生成快照的示例

    1.需求背景 需要实现一个动态加载但不显示出来的视图,且该视图上有个动态生成的二维码,最后用其去生成一张快照(也就是图片). (常见这种情况是来源于"图片分享"的功能需求,与普通图片分享不同在于,该快照图片是动态加载不显示的.) 2.需求功能拆解 动态二维码的实现 动态视图生成快照的实现 3.踩坑点提要 获取不到动态视图的bitmap 无法获取最新动态视图的bitmap 4.开发实现 动态加载的视图的布局文件代码: <?xml version="1.0" en

  • Android Activity打开后被应用快照遮住的问题

    为公司的银联二维码功能增加一个桌面快捷方式功能的时候,遇到一个头疼的问题,问题如下: 测试来回切换app主界面的四个tab,然后点击home键,点击桌面快捷方式,概率性出现银联二维码界面被主界面快照遮盖. 现象(银联二维码界面被主界面快照遮盖后): 1.进入最近任务栏,发现最近任务栏中的快照也是主界面的Activity, 也是错误的. 2.通过adb查看任务栈信息,发现任务栈信息是正常的,银联二维码界面确实是在HomeActivity上面的,只是被应用快照遮住了. 3.页面点击事件 响应的是银联

  • 解决android studio 打开java文件 内容全变了的问题

    问题描述: 某天打开项目的activity的java文件界面突然变成下面这样了,但是用Notepad++打开代码什么的都正常,不知道什么原因造成的 解决办法 使用notepad++打开java文件,随便改个地方或者直接按俩空格再保存,返回AS一切恢复.... 补充知识:Android Studio 打开后无故爆红后解决办法,简单粗暴  有效治疗AndroidStudio大姨妈的方法. 今天打开AndroidSutudio后表示一脸蒙蔽,项目无故爆红,我本以为是哪里的代码有错导致 报错,于是乎逐个

  • Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法

    if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){ finish(); return; } 应用程序入口Activity的onCreate方法中加入上面的判断,完美解决应用程序多次重启问题. 应用程序入口Activity的onCreate方法中加入上面的判断,在setcontentview方法之前调用. 以上所述是小编给大家介绍的 Android应用第一次安装成功点击"打开"后Ho

  • Android Activity共享元素动画示例解析

    目录 正文 TransitionManager介绍 Scene(场景) 生成场景 Transition(过渡) OverlayView和ViewGroupOverlay GhostView Activity的共享元素源码分析 我们先以ActivityA打开ActivityB为例 ActivityB返回ActivityA SharedElementCallback回调总结 正文 所谓Activity共享元素动画,就是从ActivityA跳转到ActivityB 通过控制某些元素(View)从Act

  • Android CameraX打开摄像头预览教程

    目录 前言 引入依赖 权限 界面 开启预览 运行测试 增加开关 小结 前言 目标很简单,用CameraX打开摄像头预览,实时显示在界面上.看看CameraX有没有Google说的那么好用.先按最简单的来,把预览显示出来. 引入依赖 模块gradle的一些配置,使用的Android SDK版本为31,启用了databinding apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin:

  • Android CameraX 打开摄像头预览功能

    目标很简单,用CameraX打开摄像头预览,实时显示在界面上.看看CameraX有没有Google说的那么好用.先按最简单的来,把预览显示出来. 引入依赖 模块gradle的一些配置,使用的Android SDK版本为31,启用了databinding apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plug

  • Android Activity生命周期调用的理解

    目录 状态 启动模式 操作APP时生命周期调用 Activity异常生命周期 总结 状态 活动存放在一个叫返回栈的一个集合,当重新打开一个Activity时,它就会出现在栈顶.当要销毁该活动时,调用finish()或back,栈顶的活动就会出栈. 运行状态:一个活动处于栈顶时 暂停状态:不处于栈顶,但仍然可见.(失去焦点,非全屏或透明的activity放置在栈顶) 停止状态:不处于栈顶,也不可见,但还是会为它保留一些变量的相关数据.(被覆盖) 销毁状态:在栈中移除(killed状态) 启动模式

  • Android CameraX 打开摄像头预览功能

    目录 引入依赖 权限 界面 开启预览 运行测试 增加开关 小结 目标很简单,用CameraX打开摄像头预览,实时显示在界面上.看看CameraX有没有Google说的那么好用.先按最简单的来,把预览显示出来. 引入依赖 模块gradle的一些配置,使用的Android SDK版本为31,启用了databinding apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotli

  • Android Activity启动模式之standard实例详解

    本文实例讲述了Android Activity启动模式之standard.分享给大家供大家参考,具体如下: Android的活动是通过任务Task来进行管理的,一个任务就是一组放在栈里的活动的集合,即所谓的返回栈(Back Stack).栈具有先进后出.后进先出的特性.当启动一个活动时,活动会在返回栈中入栈,处于栈顶位置,当按下返回键或者调用finish方法会销毁一个活动,此时栈顶活动会出栈,届时又会有新的活动处于栈顶位置. 在Android中,活动的启动模式有四种,根据不同的需求可以为活动设置

  • Android Activity中onStart()和onResume()的区别分析

    本文分析了Android Activity中onStart()和onResume()的区别.分享给大家供大家参考,具体如下: 首先你要知道Activity的四种状态: ① Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. ② Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态.此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它

随机推荐