Android のコールド スタートについては、Ooodles Technologies で Android 開発に取り組んでいるときに学びました。私の知識を共有させてください。
コールド スタートとも呼ばれるスプラッシュ スクリーン
スプラッシュ スクリーンは、アプリの起動時にしばらく表示され、しばらくするとアプリケーションのメイン アクティビティにリダイレクトされるアクティビティです。
スプラッシュ スクリーンを使用する場合:
ブランドロゴのユーザーを表示します。スプラッシュ画面を表示しながら、ネットワークまたは他のソースからデータをロードします。Android スプラッシュ スクリーンは、アプリがアプリの他のコンテンツを表示する前にアイコンを表示できるようにするために使用されます。スプラッシュは、スプラッシュ画面が表示されている間にネットワークからリソースをロードするなど、アプリケーションでバックグラウンド作業を行うためにも使用されます。アプリに滑らかな外観を与えます。
コールド スタートは、android のスプラッシュ スクリーン、起動画面、またはコールド スタートとも呼ばれます。私の意見では、ユーザーはどのアプリでもできるだけ早くコンテンツを利用できるようにする必要がありますが、ユーザーがアプリケーションを起動すると、Android は新しいプロセスを作成します。アプリケーションテーマに組み込まれている黒または白の画面をユーザーに表示している間、またはエントリ ポイントであるアクティビティのテーマです。アプリケーションがより複雑で、アプリケーション オブジェクトを使用している場合、負荷が高くなる可能性があります。アプリケーション オブジェクトは、通常、分析やエラー レポーターなどを初期化するために使用されます。つまり、黒または白の画面が表示される理由ユーザーに見せるのは良くありません。アプリケーションの読み込み時間が遅い場合は、プレースホルダーを使用して実際のコンテンツを単純に埋めることができます。一方、ワークロードが複雑な場合は、アプリケーションのロゴを表示してアプリケーションを美しく見せることができます.
前に説明したように、プロセスがロード状態にあるときにウィンドウ マネージャーによって表示されるウィンドウは、アプリケーションのテーマ (値>スタイル セクション)で設定されます。
具体的にはandroid:WindowBackground内の値を使用して、メイン アクティビティの背景の色を中央の小さなビットマップ上に作成することで、スプラッシュまたはコールド スタートを作成できます。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/colorAccent" />
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_notification" />
</item>
</layer-list>
layer_listは opaque である必要があります。背景色は、メイン レイアウトの色で塗りつぶす必要があります。そうでない場合は、レイヤーリストが常にアクティビティに表示されます。
activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorAccent"
>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?colorPrimary"
android:elevation="4dp"/>
</LinearLayout>
SplashActivity.java
package com.weone.android.controllers.activities;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.weone.android.BuildConfig;
import com.weone.android.R;
import com.weone.android.utilities.database.MyPrefs;
import com.weone.android.utilities.network.gcm.GcmHandlerActivity;
import butterknife.ButterKnife;
import io.fabric.sdk.android.Fabric;
/**
* Created by oodles on 15/1/16.
*/
public class SplashActivity extends GcmHandlerActivity {
Intent intent;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.top_activity);
ButterKnife.bind(this);
initViews();
}
private void initViews() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
intent = new Intent(mContext, DrawerActivity.class);
startActivity(intent);
finish();
}
}, 1000);
}
}