Androidのパフォーマンスの最適化-アプリの起動速度の最適化

ここに写真の説明を挿入

アプリ起動時の白い画面と黒い画面

開発中に、アクティビティのonCreate()メソッドでsetContentView(View)が呼び出され、アクティビティのレイアウトが設定されます。レイアウトを設定したため、設定されたレイアウトを表示する代わりに、起動時に白い画面または黒い画面が表示されるのはなぜですか。何?以下で一緒に理由を分析しましょう。
アクティビティを開くときに、アクティビティが属するアプリケーションがまだ実行されていない場合、システムはアクティビティのプロセスを作成します(各プロセスが開かれると、アプリケーションが存在するため、アプリケーションのonCreate()が複数回呼び出される場合があります。プロセスは1回呼び出されます)が、プロセスの作成と初期化に時間がかかります。このアクションが完了するまでに初期化に時間がかかりすぎると、画面上で何も動かず、ユーザーはボタンがクリックされていないと思います。では、新しいインターフェイスを表示せずに元の場所で停止できない場合はどうすればよいですか?これはStartingWindow(PreviewWindowとも呼ばれます)の外観で、アクティビティが開始されたように見えますが、データコンテンツは初期化されていません。
ソースコード:
ルートアクティビティを開始するとき:ActivityStack#startActivityLocked-> showStartingWindow

StartedWindowは通常、アプリケーションプロセスが正常に作成および初期化される前に表示されるため、一時的なウィンドウであり、対応するWindowTypeはTYPE_APPLICATION_STARTINGです。目的は、システムが操作を受け入れ、応答し、プログラムの初期化後に目的のUIを実現し、同時にこのウィンドウを削除することをユーザーに通知することです。

このStartingWindowは、白い画面と黒い画面の根本的な原因です。通常、開発者はアプリケーションとアクティビティのテーマを設定し、システムは設定されたテーマに従ってStartingWindowを初期化します。ウィンドウの最上位はDecorViewで、StartingWindowは空のDecorViewを表示しますが、このアクティビティで指定されたテーマをこのDecorViewに適用します。アクティビティでテーマが指定されていない場合は、アプリケーションが使用されます(アプリケーションは、テーマを設定する必要があるシステム要件です)。

テーマでは、ウィンドウの背景、アクティビティのICON、APPの全体的なテキストの色などを指定できます。属性が指定されていない場合、デフォルトの属性が使用されます。これは、上記の空のDecorViewであるため、白い画面と黒い画面になります。空のDecorViewと密接に関連しています。APPに設定したスタイルによって、白い画面か黒い画面かが決まります。

1.ブラックシリーズのテーマを選択した場合、アクティビティがジャンプすると画面が黒くなります。

@android:style/Theme.Black"

2.ライトシリーズのテーマを選択した場合、アクティビティがジャンプすると画面が空白になります。

@android:style/Theme.Light"

解決

1.背景画像を設定して、背景画像のテーマ
を設定します。プログラムの起動時に、黒い画面を避けるために、最初にこの背景画像を表示します

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:screenOrientation">portrait</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">>@mipmap/splash</item>
        <item name="android:windowIsTranslucent">true</item>        
</style>

2.透明テーマの
設定スタイルを透明に設定すると、プログラム起動後は画面が黒くなりませんが、全体が透明になり、インターフェース初期化後に一度に表示されます。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  		<item name="android:screenOrientation">portrait</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>      
</style>

2つの比較:
最初:プログラムはすぐに起動し、インターフェイスは最初に背景画像を表示し、次に他のインターフェイスコントロールを更新します。ただし、背景画像と表示するページのスタイルが大きく異なる場合は、更新が同期していないように感じます。
最初のタイプ:プログラムの起動が遅いことをユーザーに感じさせるために、インターフェイスが1回フラッシュされ、更新されて同期されます。

3.プレビューウィンドウを削除します

    <style name="AppStarTheme" parent="AppTheme">
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@null</item>
        <item name="android:windowDisablePreview">true</item>
    </style>

デスクトップのアプリアイコンをクリックした後、クリック感がないと誤解してしまう

おすすめ

転載: blog.csdn.net/yzpbright/article/details/109136679