guoziyun 4 месяцев назад
Родитель
Сommit
6295592b2b
4 измененных файлов с 26 добавлено и 3 удалено
  1. 1 1
      CHANGELOG.md
  2. 17 2
      lib/config/device.dart
  3. 5 0
      lib/homepage/home_screen.dart
  4. 3 0
      lib/play/board_play.dart

+ 1 - 1
CHANGELOG.md

@@ -25,7 +25,7 @@
 - "下一关"按钮防抖和安全pop up优化(根据firebase报错的修改)
 - 内存分级, 低内存设备不展示banner广告
 - 启动优化, 启动main中所有堵塞性的await, 改为立即启动ui,后台并行初始化firebase,本地存储等await动作; 广告延迟加载,分散启动压力
-- home page 页面优化, 采用recorder预录制方案优化绘制性能, 大幅减少 ui jank
+- home page 页面优化, 采用recorder预录制方案优化绘制性能,优化发牌动画, 大幅减少 ui jank
 - 资源竞争优化:
   1. 关卡结束点击next, 立即pop up返回主页, 不再等待插屏广告结果再次回到play页面, 这样的可以立即释放play界面资源,为插屏广告腾出内存空间。 用户体验也会更好,广告结束直接就在首页,不会闪;
   2. 页面切换或退出, 手动销毁banner广告

+ 17 - 2
lib/config/device.dart

@@ -95,9 +95,24 @@ class Device {
 
   /// ✅ 建议的图片质量(优先基于屏幕尺寸,避免依赖 androidDeviceInfo)
   String get suggestedQuality {
-    if (isTablet) return "2400";
+    // 平板设备:根据是否为低端平板做降级处理,避免对低端平板返回过高分辨率
+    if (isTablet) {
+      if (isLowEndDevice) {
+        // 低端平板使用中等质量
+        return "1800";
+      }
+      // 中高端平板使用更高质量
+      return "2400";
+    }
+
+    // 手机设备:低端使用较低质量,其他使用默认质量
     if (isLowEndDevice) return "1200";
-    return "1800";
+
+    // 根据实际像素比适度调整(高 DPR 的手机可以适当提高)
+    final double dpr = devPixelRatio;
+    if (dpr >= 3.0) return "2000";
+    if (dpr >= 2.0) return "1800";
+    return "1200";
   }
 
   /// safeArea高度 Z

+ 5 - 0
lib/homepage/home_screen.dart

@@ -193,6 +193,9 @@ class _HomeScreen extends AdsState<HomeScreen> with TickerProviderStateMixin {
 
   @override
   void dispose() {
+    // 清理 banner 广告资源
+    cleanBanner();
+    
     _refreshDebouncer?.cancel();
     latestSubscription?.cancel();
     _collectionController.dispose();
@@ -368,6 +371,7 @@ class _HomeScreen extends AdsState<HomeScreen> with TickerProviderStateMixin {
             child: IconButton(
               onPressed: () {
                 audio.playSfx(SfxType.click);
+                cleanBanner();
                 Navigator.push(context, CollectionScreen.buildRoute());
               },
               icon: const Icon(Icons.collections, color: Colors.black87),
@@ -386,6 +390,7 @@ class _HomeScreen extends AdsState<HomeScreen> with TickerProviderStateMixin {
           IconButton(
             onPressed: () {
               audio.playSfx(SfxType.click);
+              cleanBanner();
               Navigator.push(context, SettingScreen.buildRoute());
             },
             icon: const Icon(Icons.settings, color: Colors.black87),

+ 3 - 0
lib/play/board_play.dart

@@ -798,6 +798,9 @@ class _BoardPlayState extends AdsState<BoardPlay> with TickerProviderStateMixin
     _prepareAnimationController.stop();
     dealingAnimationController.stop();
 
+    // 🔥 先清理 banner 广告资源,再清理其他资源
+    cleanBanner();
+    
     // 🔥 先保存进度,再清理资源
     saveProgress();