当前位置: 首页 > article >正文

aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?

背景

近期各个大厂已经开始准备aosp15的系统rom适配工作了,应该是想2025年初开发发布相关的新机型,所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。

近期就有相关学员朋友在做android15相关的dialog开发时候,发现了一个严重的必现闪屏类bug。具体现象如下图所示:
在这里插入图片描述

明显可以看出点击dialog上按钮会正常跳转到第二个Activity,但是第二个Activity返回到第一个Activity时候就出现了必须的闪白屏的现象。

刚好千里马的学员朋友们非常期望有这样的一些窗口疑难类的bug,也刚好可以作为wms专题学习后的一些实战扩展项目给大家进行企业级别的实战哈。
闪屏问题的复现

复现环境要求:

aosp15 android-15.0.0_r3 估计其他版本也一样复现 复现demo编写:

1、编写定义一个DialogActivity,MainActivity AndroidManifest定义如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">
        <activity
            android:name=".DialogActivity"
            android:exported="false"
            android:theme="@style/Theme.AppCompat.Dialog">

        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

主要就是对 android:theme="@style/Theme.AppCompat.Dialog即可以代表这个Activity是Dialog风格的,MainActivity主要是负责跳转到DialogActivity,然后DialogActivity自己再进行跳转

2、要两个DialogActivity跳转切换

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class DialogActivity extends AppCompatActivity {

    private TextView tvMessage;
    private Button buttonOpenAnotherDialog;
    private boolean isFirstTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); // 隱藏標題欄
        setContentView(R.layout.activity_dialog);

        // 获取传递的布尔值,默认为true
        isFirstTime = getIntent().getBooleanExtra("isFirstTime", true);

        initView();

        buttonOpenAnotherDialog.setOnClickListener(v -> {
            Intent intent = new Intent(this, DialogActivity.class);
            intent.putExtra("isFirstTime", false); // 传递false表示不是第一次
            startActivity(intent);
        });

        // 设置TextView的内容
        if (isFirstTime) {
            tvMessage.setText("第一次");
        } else {
            tvMessage.setText("第二次");
            buttonOpenAnotherDialog.setVisibility(Button.INVISIBLE); // 隐藏按钮
        }
    }

    private void initView() {
        tvMessage = (TextView) findViewById(R.id.tv_message);
        buttonOpenAnotherDialog = findViewById(R.id.button_open_another_dialog);
    }
}

activity_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="@android:color/white">

    <TextView
        android:id="@+id/tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@color/black"
        android:layout_marginBottom="16dp"/>

    <Button
        android:id="@+id/button_open_another_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Open Another Dialog"/>
</LinearLayout>

3、点击跳转复现问题 复现非常简单,MainActivity点击弹出DialogActivity后,再点击DialogActivity弹出第二个DialogActivity,再返回就必现

在这里插入图片描述

更多framework干货内容,aosp最新实战干货,请关注下面“千里马学框架”


http://www.kler.cn/a/386690.html

相关文章:

  • nginx proxy_pass中斜杠问题
  • Java集合框架之Collection集合遍历
  • 高级java每日一道面试题-2024年11月06日-JVM篇-什么是 Class 文件? Class 文件主要的信息结构有哪些?
  • 鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
  • Scala学习记录,case class,迭代器
  • 【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线
  • Qt教程(007):资源文件添加
  • nodejs:下载,安装,系统环境配置,更换镜像
  • Leetcode - 周赛422
  • Kafka集群的安装与部署
  • 《Android 车载 Launcher 开发 - 显示 Widget》
  • docker pull/build 失败 设置国内镜像源
  • 《C++ 网络编程:高效实现 TCP/IP 与 UDP 通信》
  • 数据分析-39-时间序列分解之经验小波分解EWT
  • 发顶会首选:大模型+时间序列!掌握这3大切入点,小白也能轻松上手!
  • 排序算法基础
  • C/C++ 中的预处理器指令有哪些?举例说明其用途
  • ssm基于JAVA的网上订餐管理系统+vue
  • Git进阶(十八):git rebase详解
  • DSP28335学习笔记-1
  • 解决SRS推送webrtc流卡顿问题
  • YOLOv4的网络架构解析
  • linux基础理解和使用 iptables 防火墙
  • 【Django】视图函数
  • albert模型实现微信公众号虚假新闻分类
  • 如何在算家云搭建CodeGeeX4(文本生成)