背景
APP中啟動廣告圖虫腋,由于去掉了緩存寡壮,每次顯示的時候會先顯示兜底圖,然后再去加載服務端配置好的新圖心包,渲染過程比較丑履因,需要進行優(yōu)化
問題難點
1.啟動圖沒考慮到全屏樣式障簿,然后再啟動程序入口MainActivity中又設置了去處狀態(tài)欄和設置全屏的樣式,導致兩邊樣式不統(tǒng)一栅迄。
2.啟動的廣告圖站故,加載需要耗時,并且依賴于接口(PS:一般做緩存就可以了毅舆,但是需求方需要廣告的實時性西篓,緩存方案就pass掉了)
3.Glide加載兜底圖和樣式圖不匹配
實現(xiàn)思路
首先,要明白憋活,白屏的樣式主題在那里設置岂津,入口--》AndroidManifest---〉你的主程序入口,如下代碼:
<activity
android:name=".activity.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:exported="true"
android:theme="@style/AppStartThemeBg"
android:windowSoftInputMode="stateUnchanged|adjustPan">
其中theme 就是你的白屏優(yōu)化主題悦即,一般而已吮成,你只要設置了一張兜底圖,并且十分貼近你的應用啟動的圖片辜梳,那么就不會讓人產(chǎn)生頓挫感粱甫。
<style name="AppStartThemeBg" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 防止首頁啟動白屏 add by miao 2016年12月1日 -->
<!--<item name="android:windowTranslucentStatus">true</item>-->
<item name="android:windowBackground">@drawable/app_start_bg</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimaryDark">@color/white</item>
</style>
其中要留意狀態(tài)欄屬性,如果你不設置的話作瞄,不同的機型的狀態(tài)欄茶宵,他有可能顏色不一樣,一般設置為和啟動圖一樣的顏色宗挥,此處乌庶,我設置為白色,是因為我啟動圖背景顏色是白色的契耿。設置完這一步瞒大,啟動圖,就是全屏啟動宵喂。那么問題1是怎么出現(xiàn)的呢糠赦?原因是,在MainActivity中,onCreate之前拙泽,設置了相應的主題淌山,該主題和你啟動圖的主題樣式不匹配,然后就會照成顾瞻,啟動圖即將結束的時候泼疑,被改變了樣式,造成bug荷荤。此處:我們就統(tǒng)一一下入口MainActivity的樣式和啟動圖樣式即可退渗。
問題二:一般啟動圖過后,都會有廣告圖蕴纳,這是企業(yè)為了運營產(chǎn)品而設的会油。依據(jù)運營的需求,如果對廣告沒有時效性古毛,比如我這次打開翻翩,緩存下一次的廣告,這種能接受的話稻薇,那么嫂冻,速度上會有很大的提高。但是塞椎,對于有實效性的桨仿,比如,我就是要他實時展示案狠,用戶本來打開APP的機會就不怎么多服傍。這種,我們只能稍微犧牲一下性能了骂铁。針對該場景伴嗡,可以如下設計:
正常打開:
接口數(shù)據(jù)---》loadSplash ---〉緩存本次data---》加載廣告圖
異常打開:
handler 3s 等待接口數(shù)據(jù)失敗---〉loadSplash ----》讀取上次緩存---〉加載廣告圖|進入MainActivity
相信大家對流程應該沒問題,那么ok从铲,進入問題三。Glide澄暮,我需要他加載完再展示到ImageView里呀名段。如何實現(xiàn)?廢話不多說泣懊,直接貼代碼:
Glide.with(context).asBitmap().load(url).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
@Override
public void onLoadFailed(Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
}
});
作用是:下載完成后伸辟,把圖片顯示在你廣告圖上,由于glide有三級緩存機制馍刮,因此信夫,最好是提前在接口返回的時候,進行預加載,然后進入到廣告啟動的流程中的時候就可以直接復用上一次的bitmap静稻,不會浪費相應的時間警没。因此思路如下:
接口數(shù)據(jù)--->開始預加載廣告圖---》loadSplash---〉加載廣告圖并且無兜底圖
到這一步,啟動優(yōu)化就已經(jīng)完成了振湾,記錄一下杀迹。