硕士生
 
- 金币
- 3833
- 好评
- 25
- 信誉
- 120
|
发表于
2025-11-24 13:46:37
来自手机
|
显示全部楼层
| 阅读模式
来自 中国
本帖最后由 tuandgame 于 2025-11-24 13:46 编辑
https://bbs.binmt.cc/forum.php?mod=viewthread&tid=159472
按照这个教程实践了。由于 play上面是新版1.0170。我不知道改了啥。启动的部分按照原教程感觉还是很慢。我数那个转一转的那个转了有20多次。下面补补个解法,实测确实快了些,就算是原教程的小补充---
一、效果实测
同一台机器、冷启动
视觉:白屏时间砍半,但未做到「一闪即过」,仍有 体感。
---
二、已落地
1. 开会员(砍广告链路)
文件:/smali/com/rocks/music/videoplayer/Splash.smali
方法:isPremiumUser()Z
替换 4 行:
```
.method public isPremiumUser()Z
.registers 9
const/4 v0, 0x1
sput-boolean v0, Lcom/rocks/themelibrary/AppThemePrefrences;->e:Z
return v0
.end method
```
作用:跳过 MobileAds.initialize()、UMP 同意框、FirebaseRemoteConfig.fetch() 等主线程大户,耗时 200-600 ms 被砍掉。
2. Splashativity(砍人为延迟)
方法:M3()V
替换 2 行:
```
.method private M3()V
.registers 1
invoke-direct {p0}, Lcom/rocks/music/videoplayer/Splash;->N3()V
return-void
.end method
```
作用:去掉 Handler.postDelayed(300|2000 ms) 保底逻辑,直接发跳转消息,耗时 300-2000 ms 被砍掉。
---
三、理论补充:为什么只砍半
Android 启动链 =
进程创建 → Application → ContentProvider → onCreate → onResume → 第一帧
我们改的两步仅作用于「onCreate 内部 Java 代码」,约占整条链 30-40%;
真正大头在后面:
- MultiDex install(dex 分析 + IO)
- 第三方 ContentProvider 批量初始化
- FirebaseRemoteConfig 首次 fetch(网络)
- UMP GDPR 弹窗(联网 + WebView)
- Room 首次建表(磁盘 IO)
- 主题背景大图解码(GPU 上传)
---
四、继续深挖路线图(欢迎接力)
1. Application 阶段
- 用 `adb shell am start -W` 对比 TotalTime vs ThisTime,差值 > 300 ms 即 Provider 在拖
- 把非必要 `<provider>` 直接注释(常见于 Firebase、Facebook、友盟)
- 启用 baseline profile(Android 13+ 自动生效)让热点 dex 提前 AOT
2. 主题窗口
给 Splash Activity 套透明主题:
```xml
<style name="Launcher">
<item name="android:windowBackground">@null</item>
<item name="android:windowIsTranslucent">true</item>
</style>
```
视觉白屏消失,但窗口绘制起点仍在,需继续下一条。
3. 网络与弹窗后移
- UMP consent form 延迟到首页 onResume() 再 show()
- FirebaseRemoteConfig.fetch() 放后台协程,首页只 activate()
启动页只读 SP 布尔(磁盘一次,< 5 ms)
4. Room / SharedPreference 重型迁移
首次 Room.build() 常 100-300 ms,在 Application 子线程先 build 一次;启动页只拿内存引用
SP 存放大 JSON → 分区文件,启动页只读关键键
5. so 与广告 SDK 尾巴
`strace -e dlopen` 看哪个 so 在主线程加载 → 延迟到子线程
Google Mobile Ads 22.0.0+ 提供 `initializeOnBackgroundThread()`,启动页完全不调用
---
五、一句话总结
「会员秒跳 + M3 清零」是低成本第一刀,已砍 50%;
真正想冲进 300 ms 以内,必须把 Application 阶段网络/IO/Provider 全部后移,欢迎把挖掘结果发回来,一起把白屏打到透明!
——丞相旗下降速分部 敬上
|
|