荣耀机型半屏问题-尝试修复

结论

overridePendingTransition(0, 0); // onCreate:禁用进入和退出动画

用户反馈机型

安卓客户端不满屏幕:荣耀X50、荣耀X60、荣耀60Pro、荣耀90、荣耀100、荣耀magicpad 2等

现象

打开应用,点击进入音视频可视化界面:有时好,有时一半黑屏。

购买荣耀100复现后捕获日志

2025-07-04 13:57:38.676 2731-3322/? I/HwPCUtils#HwPCMultiWindowManager: setRequestedOrientation, displayId 0
2025-07-04 13:57:38.677 2731-3322/? I/ActivityTaskManager: clearSizeCompatModeAttributes when in setRequestedOrientation for com.a/com.a.LiveActivity
2025-07-04 13:57:38.677 2731-3322/? I/WindowManager: handleTopActivityLaunchingInDifferentOrientation background visible activity to cover config
2025-07-04 13:57:38.678 1765-1765/? I/SurfaceFlingerEx: WMS requires statistical surfaceView layer info
2025-07-04 13:57:38.678 2731-3322/? I/DisplayRotationCoordinator: sub screen rotation fail
2025-07-04 13:57:38.678 2731-3322/? I/HwPCUtils#HwPCManagerService: RotateObserver onRotate 0->1
2025-07-04 13:57:38.678 2731-3322/? I/DE J DES: [effect] Display RotateObserver onRotate 0->1
2025-07-04 13:57:38.678 2731-3372/? I/DE J DES: [effect] setScene(70, 73
2025-07-04 13:57:38.679 2731-3322/? I/TransitionController: first create transition: TransitionRecord{300f72e id=-1 type=CHANGE flags=0x0}, caller: com.android.server.wm.DisplayContent.requestChangeTransition:4609 com.android.server.wm.DisplayRotation.updateRotationUnchecked:856 com.android.server.wm.DisplayRotation.updateOrientation:619 com.android.server.wm.DisplayContent.updateOrientation:2192 com.android.server.wm.DisplayContent.updateOrientation:2102 
2025-07-04 13:57:38.680 3739-4019/? V/WindowManagerShell: Transition requested (#1699): android.os.BinderProxy@f88eaa1 TransitionRequestInfo { type = CHANGE, triggerTask = null, pipTask = null, remoteTransition = null, displayChange = DisplayChange { displayId = 0, startAbsBounds = null, endAbsBounds = null, startRotation = 0, endRotation = 1, physicalDisplayChanged = false mDisplaySwitchChanged =false }, flags = 0, debugId = 1699, displayMode = 0, hnTransitionRequestInfoEx = HnTransitionRequestInfoEx { isAllowAsyncStartTransitionfalse} }
2025-07-04 13:57:38.680 3739-4019/? I/PipTransition: handle PiP enter request type:CHANGE
2025-07-04 13:57:38.680 1765-3432/? I/SurfaceFlinger: createLayer layername: Surface(name=WindowToken{eb18033 type=2019 android.os.BinderProxy@9c8f36d})/@0x1674b18 - animation-leash of token_transform type: Layer address = 0xb400007da96041e0
2025-07-04 13:57:38.680 3739-4019/? I/PopOverTransitionHandler: handleRequest
2025-07-04 13:57:38.680 1738-1850/? E/ANDR-PERF-OPTSHANDLER: Perflock resource /sys/devices/system/cpu/bus_dcvs/L3/soc:qcom,memlat:l3:prime/min_freq not supported
2025-07-04 13:57:38.680 1738-1850/? E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [13, 22]
2025-07-04 13:57:38.682 1765-3432/? I/SurfaceFlinger: createLayer layername: Surface(name=WindowToken{cb12380 type=2000 android.os.BinderProxy@20230b2})/@0xf965356 - animation-leash of token_transform type: Layer address = 0xb400007da9575bd0

尝试修复

# 2025-07-04 13:57:38.682 1765-3432/? I/SurfaceFlinger: createLayer layername: Surface(name=WindowToken{cb12380 type=2000 android.os.BinderProxy@20230b2})/@0xf965356 - animation-leash of token_transform type: Layer address = 0xb400007da9575bd0

从日志看到相关animation动画信息怀疑:是否Activity淡入淡出动画在该类机型中出现问题?

  • 尝试禁用动画。
  • 加开关测试:未禁用前进出10大概出现2-3次;禁用后未再出现。因此就用该方法临时处理。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
	if (FileUtils.isFileExists("/sdcard/hh.txt")) {
	  overridePendingTransition(0, 0); // --- 禁用进入和退出动画
	  Log.i(TAG, "LiveActivity overridePendingTransition onCreate: close");
	} else {
	  Log.i(TAG, "LiveActivity overridePendingTransition onCreate: open");
	}
    setContentView(R.layout.activity_live);
}

界面截图

显示半屏图片1
显示半屏图片2
显示半屏图片3

附录

方法介绍

overridePendingTransition 是 Android 中用于自定义 Activity 切换动画的方法。它允许开发者指定进入和退出 Activity 时的动画效果,从而增强用户体验。

基本语法

@Override
public void finish() {
    super.finish();
    overridePendingTransition(enterAnim, exitAnim);
}

或者

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
overridePendingTransition(enterAnim, exitAnim);

参数说明

  • enterAnim:新 Activity 进入时的动画资源 ID。
  • exitAnim:当前 Activity 退出时的动画资源 ID。

动画资源定义

动画资源通常放在 res/anim/ 目录下。以下是一些常见的动画示例:

slide_in_right.xml(从右侧进入)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="100%"
        android:toXDelta="0%" />
</set>

slide_out_left.xml(向左侧退出)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="0%"
        android:toXDelta="-100%" />
</set>

使用示例

启动 Activity 时设置动画

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

关闭 Activity 时设置动画

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}

注意事项

  • 必须在 startActivity()finish() 之后立即调用 overridePendingTransition,否则动画不会生效。
  • 如果不需要动画,可以将参数设为 0。
  • 动画资源应尽量使用系统提供的短动画时间(如 @android:integer/config_shortAnimTime)以确保一致性。

常见动画效果

  • 淡入淡出:使用 alpha 动画。
  • 滑动:使用 translate 动画。
  • 缩放:使用 scale 动画。

通过合理使用 overridePendingTransition,可以显著提升应用的交互体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值