Android8.0 適配解決頁面跳轉過程出現短暫黑屏的問題

??????小菜在適配 Android8.0 過程中,遇到很多問題,有很多很常見的問題,今天來整理一下頁面跳轉時黑屏的問題。

問題猜測

猜測一:

??????顯示 Activity 頁面之前會優(yōu)先開啟一個 Starting Window(Preview Window),等待 Activity 加載完成之后顯示 UI 界面,猜測在這個等待過程中可能會出現頁面跳轉時的短暫黑屏。

猜測二:

??????小菜的 BaseActivity 頁面中在 onCreate() 和 finish(),方法中添加了進入頁面和退出頁面時的動畫效果,猜測可能是動畫效果不兼容引起頁面跳轉時的短暫黑屏。

@Override
public void onCreate(Bundle savedInstanceState) {
    if (toggleOverridePendingTransitionStart()) {
        overridePendingTransition(R.anim.slide_right_in, 0);
    }
    super.onCreate(savedInstanceState);
}

@Override
public void finish() {
    super.finish();
    BaseAppManager.getInstance().removeActivity(this);
    if (toggleOverridePendingTransitionFinish()) {
        overridePendingTransition(0, R.anim.slide_right_out);
    }
}

嘗試解決

  1. 優(yōu)先嘗試修改主題樣式,小菜前段時間整理 解決 Android 升級 SDK API 27 過程中遇到的問題 中有一個 Only fullscreen opaque activities can request orientation 問題,對于透明或半透明頁面,Android8.0 需要將主題中的 android:windowActionBar 屬性設為 false;小菜理解這個屬性設為 true 是設置本頁面為透明頁面,小菜以為如果去掉相當于省略這個過渡效果,等待 1-2s 時間進入新頁面;測試在小菜的 Android8.0 應用里面依舊會出現跳轉短暫黑屏現象,故嘗試方式一失??!
  2. 再次嘗試修改主題樣式,以為萬能的添加主題背景圖,設置主題 windowBackground,小菜以為添加一張透明背景圖就可以解決;測試在小菜的應用背景圖是有的,但還是會出現跳轉短暫黑屏現象,故嘗試方式二失??!
<style name="main_activity_style" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowIsTranslucent">false</item>
    <item name="android:windowDisablePreview">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@drawable/background_splash</item>
    <item name="android:background">@null</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
  1. 小菜擔心頁面中會有其他因素影響,新建一個 AppCompatActivity 進行測試,以上兩種方法均不會出現黑屏問題;因此小菜開始考慮 overridePendingTransition 動畫效果的影響,把 BaseActivity 中的動畫效果去掉;測試一切正常,沒有出現短暫黑屏現象,因此確定是 overridePendingTransition 問題;
  2. 小菜測試發(fā)現是在 Android8.0 中 overridePendingTransition 若設為進入和進出為 0 時會出現黑屏,解決方案是:將 0 換為固定的進入和退出的 anim 即可,如下:
// 原來
overridePendingTransition(R.anim.slide_right_in, 0);
// 替換為
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);

// 原來
overridePendingTransition(0, R.anim.slide_right_out);
// 替換為
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);

??????Tip:若只想有進入或退出時的動畫,另一個動畫去掉呢,可以自定義個 no_anim,替換上即可:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="0">
</set>

// 原來
overridePendingTransition(0, R.anim.slide_right_out);
// 替換為
overridePendingTransition(R.anim.no_anim, R.anim.slide_right_out);

插曲總結

  1. overridePendingTransition 第一個參數為頁面進入時動畫,第二個參數為頁面退出時動畫,不要記反了;
  2. 小菜的 BaseActivity 是在 onCreate() 和 finish() 中分別調用 overridePendingTransition 的,所以想調整個別頁面其他動畫效果時,需要在 onCreate() 和 finish() 方法中方分別定義。

??????至此,小菜的應用在 Android8.0 中頁面跳轉短暫黑屏問題已解決,測試正常;小菜發(fā)現在優(yōu)化和適配的道路上還有很多意想不到的問題,隨時調整隨時記錄,希望可以順利解決!


來源: 阿策小和尚

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,003評論 2 59
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,334評論 0 17
  • 在日常的生活中或商業(yè)中,我們會遇見很多場景,為了達到某個目的或促成某筆交易,我們必須要與人談判。小到日常生活中與子...
    路上的威利閱讀 828評論 0 0
  • 為了做好幼小銜接工作,我們一年級全體老師冒著雨來到機關幼兒園參觀學習。 王園長簡明扼要的介紹,...
    竹林聽歌_d973閱讀 505評論 0 2

友情鏈接更多精彩內容