5

アプリの起動時に、コールド スタートかどうかを判断する方法は? コールド スタートとは、アプリが以前の状態から再開されただけでなく、最初から起動されたことを意味します。

:編集: 私の質問を詳しく説明します: アプリの起動モードを見つけようとしています: コールド スタートまたはウォーム スタート。コールド スタートとは、アプリがバックグラウンドで起動されない、または起動されないことを意味するため、完全な起動が必要です。ウォーム スタートとは、まだバックグラウンドにあることを意味するため、より迅速に再開および開始できます。これら2つの開始モードをプログラムで区別する方法は?

4

2 に答える 2

5

アプリがまだバックグラウンドで実行されている場合、最初に onResume が呼び出され、onCreate はまったく呼び出されません。

デバイスで初めて起動した場合は、sqlite または共有設定を使用してデータを保存し、最初にそこにあるかどうかを確認します。

于 2013-09-03T20:46:15.037 に答える
2

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);
    }
}
于 2016-11-15T07:09:49.033 に答える