当Activity设置为透明主题时,按Home键,Dialog闪烁的解决方法

Android Activity劫持攻击原理与防护方案详解 Activity劫持是Android安全中的一种典型攻击手段,攻击者利用系统任务栈管理机制覆盖关界面实施欺诈。从技术原理看,这种攻击主要基于Activity生命周期回调机制和任务栈优先级规则,通过监控系统日志或滥用可访问性服务实现精准劫持。在移动应用安全领域,界面劫持防护需要结合静态配置(AndroidManifest)和动态检测(运行验证),特别对金融类APP等敏感场景,还需引入进程级监控和生物特征验证。有效的防护方案能显著降低攻击成功率,某银行APP实测数据显示防护后劫持成功率可从17.6%降至0. 阅读详情
1、前提条件:
(1)设置Activity的主题为透明主题
(2)弹出对话框

2、问题:按Home键时,Dialog会闪烁,不是自然的退出动画

3、原因分析:
(1)Activity设置成了透明主题,没有了正常的退出动画
(2)Dialog依赖于Activity所在的父窗口,Activity透明不再做退出动画,而Dialog需要做退出动画,造成了闪烁。

4、解决方案
(1)业务需求无法取消Activity的透明主题(android:windowIsTranslucent),导致该问题无法直接解决
(2)只能进行规避,比如提升Dialog的窗口层级,设置为系统级别的悬浮窗。
mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
5、透明主题
<style name="AppBaseTheme" parent="Theme.AppCompat.color">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
</style>


RecyclerView实战避坑指南:CardView圆角、图片闪烁、点击识别与性能优化 RecyclerView 是 Android 列表开发的核心组件,其本质是基于 ViewHolder 模式与 LayoutManager 协同实现的高效视图复用机制。理解其测量、布局、绑定与回收的生命周期原理,是解决白屏、闪烁、点击失效和卡顿等高频问题的技术基础。关价值在于通过 DiffUtil 实现精准局部刷新、利用 ViewBinding 提升类型安全与可测性、结合 Glide 预加载与 Target 复用抑制 ImageView 闪烁,并借助坐标映射实现 CardView 内多区域精准点击识别。典型 阅读详情

相关推荐

DIALOG画图闪烁问题解决

DIALOG画图会遇到闪烁的问题,这个方案可以达到完全无闪烁。里面包含双缓冲技术讲解(含代码)以及闪烁问题产生的原由,以及个人实现完全无闪烁方法,希望对大家有所帮助。如有具体问题可以联系我(解决方法在OnPaint()加入双缓冲,其他方法不变)

Android Dialog 弹出的 页面闪一下的处理

【代码】Android Dialog 弹出的 页面闪一下的处理。

afufufufu的博客 3130

Android使用Dialog风格弹出框的Activity

Android中经常会遇到需要使用Dialog风格弹出框的activity,首先我们可能会首先想到的是在XML布局文件中设置android:layout_height=”wrap_content”属性,让activity的高度自适应,显然这还不行,我们还需要为其DialogActivity设置自定义一个样式  <style name=dialogstyle> <!--设置dialog的背景--> @android:color/transparent <!--设置Dialog的windowFr

全屏Dialog间切换,出现闪屏

项目中有个交互是点击Activity中的一个按钮,弹出全屏Dialog1,再点击Dialog1上的按钮,弹出Dialog2,按返回回到Dialog1。关系图如下: 由于项目中所有的Dialog都是全屏的,在两个Dialog相互切换的候,总是觉得会闪屏,一直很纳闷是为什么,后来一个同事说你把动画去掉试试,才想起来写代码的Dialog拉起和退出的动画都没有设置过,为默认值。 于是在st...

孔小乐的博客 9637

解决DialogFragment闪烁或者闪屏的问题

今天修复一个历史遗留BUG;项目中的dialog基本都是通过DialogFragment来实现的,但是同也有个问题,比如再加载网页的候,加载之前xshow出个dialog,网页加载完后dismiss,但是如果网络很好,网页加载的速度很快,不到1s就加载完成的话,就会出现一个问题,界面会闪一下,如果你的Activity主题是默认的话,就表现为黑屏一下,如果是透明主题,就表现为可以看到上一个页面,然后立马恢复虽然这个闪屏间很短,估计只有几ms,但是看着还是很不爽的。 最开始的解决方案是想办法设置

Alrey的博客 5827

跳转dialog主题activity 界面屏幕抖动解决

最近首页有个复杂的dialog 页面,自己用的activity跳转,将主题设置dialog, 发现进入界面的候屏幕 有候会闪屏,上下抖动,而有候没问题,尝试解决,最后我在跳转后的activity的onCreate()或onResume()方法下添加这个方法,搞定 private void smoothScreen(){ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { ViewG

XuXin_的博客 2104

Fragment里显示Dialog闪屏

场景:               ManiActivity里包含里多个Fragment,每次刷新显示Dialog,会出现闪屏解决方案:              在每一个Fragment的onCreate()方法里添加如下代码: getActivity().getWindow().setDimAmount(0); 这个函数用来设置 Dialog 周围的颜色。...

fuweng886的博客 5050

Android按下多任务java_java-Android-如何在按下HOME取消所有活动?

我有一个包含多个活动的应用程序.目前,整个应用程序包含约8个活动.首先,我显示一个启动屏幕几秒钟,其中所有首选项都已加载并设置(来自sharedPreferences)-这些都保存在我为此创建的“ Setting”类中-该类基本上只有一堆静态变量,因此应用中的所有活动都可以阅读并根据需要进行修改.编辑:随着应用程序的运行,此类中将存储更多数据,其中一些来自Web服务-数据被解析为对象,并且对这些对...

weixin_42361933的博客 121

Android主题Theme

简述: 主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 android:theme="@a...

明潮的BLOG 802

android:windowIsTranslucent &分享回调 引发的血案

背景: 遇到一个线上用户反馈 case,用户在分享成功之后回调,我们的回调弹窗闪烁多次,无法继续操作,部分机型出现 case跟踪: 针对用户情况,用华为荣耀9.0系统复现。发生场景是,用户在签到中心做任务领取奖励,分享回调页面无法正常展示,有很严重体验问题,而且是少部分机型出现。在 debug 环境逐步跟踪发现,原来是activity 的 style 中的android:windowIsTr...

独领fengsao的猫 1124

写在20111020:应用界面进入出现闪屏问题

有些应用用户选择进入的候可能需要finish当前的界面Activty,这新起的这个界面Activty绘制出来,旧的界面Activty关闭的候会让用户在视觉上有短暂的闪屏,这种情况都可以通过设置界面的主题透明解决。 在每一个Activity配置的候添加: android:theme="@style/Theme.Translucent" 同在res/values/下面添加一个sty...

meohao 163

Android 仿饿了么底部栏购物车弹出/消失效果

当点击底部栏,会有一个窗口从下往上弹出来,且背景色变暗。点击背景或按返回,窗口会由上往下消失,然后背景色回复原因。 看到这点,我们很容易想到使用Dialog来实现效果,下面就来尝试下吧。 方案1: 首先是要自定义Dialog,且给Dialog添加动画效果,如下。 Dialog dialog = new Dialog(MainActivity.this,...

冬眠FF的博客 3325

AndroidNavigation状态栏管理终极指南:实现完美沉浸式体验

Android应用开发中,状态栏管理是提升用户体验的关环节。AndroidNavigation库为开发者提供了简单而强大的状态栏管理方案,让你轻松实现各种沉浸式效果。本文将详细介绍如何使用AndroidNavigation管理状态栏,打造完美的沉浸式用户体验。 ## 为什么需要专业的状态栏管理? 🤔 传统的Android状态栏管理存在诸多痛点:不同Android版本API差异大、状态栏与

gitblog_01066的博客 502

Android处理软盘弹出问题和盘表情切换问题

盘可能引发的问题: 盘弹出,可能会挤压页面中的布局和view,导致页面显示不可控,尤其是当页面设置了各种主题候,更加不可控制; 处理软盘和表情盘切换,很容易造成切换生硬,有闪烁的问题; 传统解决方案的缺陷: 网上有很多解决方案,大多都是设置 android:windowSoftInputMode="adjustResize|stateHidden",并把输入框靠近底部,这样就能通过窗口自适应把相应的输入控件挤上去,而且可以通过布局变化监听到软盘弹出和消失事件,方便处理回调; 关.

qq_23992393的博客 1282

Android应用防截屏技术全解析:从FLAG_SECURE到精细化安全控制

在移动应用开发中,数据安全与隐私保护是核心议题。Android系统提供了视图渲染和窗口管理机制,允许开发者控制屏幕内容的捕获行为。通过系统级的安全标志位,可以防止敏感信息被非法截取,这在金融交易、企业通讯等场景中具有重要技术价值。FLAG_SECURE作为基础防护手段,结合SurfaceView的独立表面控制,能够有效拦截系统截屏和录屏操作。对于需要局部保护的场景,开发者可以通过动态窗口标志管理或自定义安全容器视图实现精细化控制。本文深入探讨了Android防截屏的实现原理,涵盖了FLAG_SECURE、S

weixin_33736649的博客 477

安卓经验收集(不断更新)

一、如何让对话框在任意位置显示 在地图上的候通常点击哪里就会在哪里显示一个提示框,在安卓实现的候就先要获得该坐标,并且放入dialog的window里面去 上代码: OnClickListener clicklistener = new OnClickListener(){ @Override public void onClick(View view) { // TODO A

program_thinker的专栏 1958

附加多种动画效果思路的自定义Dialog

因为工作需要,最近写了几个Dialog的类,后来出于新鲜和好奇,就研究了网上一些比较常用的Dialog的Demo,总体感觉效果绚丽,本质还是不变。这里先整理和推荐两个查询中搜索到的github项目这个是集合了多种Android经典Demo的整合地址,并且在不断更新完善:https://github.com/XXApple/AndroidLibs这个是个人推荐和感觉不错的Dialog,尤其是其中的动...

wangyetongsss的博客 581

NiceDialog状态保存深度解析:屏幕旋转后弹窗状态不丢失的秘密

Android 开发中,屏幕旋转后 Activity 重建,弹窗消失、参数归零是让人头疼的老问题。基于 DialogFragment 的轻量级 Android 弹窗库 **NiceDialog**,通过一套精巧的状态保存机制,让弹窗在屏幕旋转后依然完整地“留在原地”。本文深度解析 NiceDialog 弹窗状态保存的实现原理,揭开弹窗状态不丢失的秘密,帮你彻底告别弹窗闪烁与状态丢失的尴尬。

gitblog_00610的博客 319
上一篇: 消除过期的对象引用
下一篇: 对所有对象都通用的方法
Dson2020
博客等级 码龄14年 20粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值