我一直以为只要在 application的theme下设置background就好了,(同类型解决方法还有设置为透明)
但是今天在实际测试中发现,
在oppo m37a 上是有效果的(api 22)
但是在红米4 上发现是没有效果的!(api23)
我尝试打开红米4上多款应用发现:
瞬间打开且没有白屏
高德地图
掘金
segmentfault
手机淘宝
印象笔记
等。。。
有白屏
知乎日报
扇贝单词
人民日报
摩拜单车
没有白屏,但是点击icon 会延迟一会才打开
简书
UC浏览器
支付宝
如果是白屏或者是“延迟打开”,我觉得可以办到
那要怎样才能做到segmentfault ,手机淘宝这样呢?
启动第一个activity,这个activity 只是为了作为背景显示,把一些初始化的工作放到第2个activity中?
这样的话做法好奇怪啊?应该有什么更直接的方案吧?
要設
background
也应该是windowBackground
,不需要2個activity來實現,如果到這種地步,很有可能你的application或mainactivity做了太多主執行緒工作了。把啟動設定為透明,在主題檔案中加入以下程式碼
設定主題 然後在這裡引用即可
若是在application中所做工作過多的話,我倒是有一個簡單的方法,可以透過多進程方式按進程啟動,次進程負責主進程啟動初始化時啟動一個屏保界面,當主進程完成初始化發送給次進程退出,主進程介面啟動,這樣就避免application初始化過大導致首次啟動過慢的問題。
先理清為什麼白屏, 然後根據自己業務代碼修改.
當桌面圖標被點擊後, 會打開App的第一個Activity.在Activity被創建前可能還有Application會被創建, 知道Activity的onResume執行後才真正看到第一個頁面.在此之前,可以理解為就是白屏時間(使用黑科技修改theme不考慮).所以減少白屏,就是減少這幾個流程所消耗的時間,簡單粗暴的方法就是把這些依賴套件的初始化都放到Splash頁面onResume後執行
好懶,不想打字...
實際上遇到各種問題,都需要自己解決.比如初始化只需要幾百毫秒,Splash太快跳轉了,可以加多一點實際判斷.比如沒有Splash頁面,可以把初始化放到首頁,初始化完再執行其他操作.再比如重複初始化,可以添加一個static變量標記是否已初始化.
總結就是找到哪些地方佔據了第一個Activity的onResume之前的時間,針對優化(還可能是圖片解析,佈局渲染...)