Android:如何判断冷启动

时间:2013-08-22 16:20:33

标签: android cold-start

当应用程序启动时,如何确定它是冷启动与否? 冷启动,我的意思是应用程序从一开始就启动,而不是从以前的状态恢复。

:编辑: 详述我的问题: 我正在尝试找到应用程序的启动模式:冷启动或热启动。冷启动意味着应用程序从未在后台启动或不启动,因此需要完全启动。热启动意味着它仍处于后台,因此可以恢复和启动更快。如何以编程方式区分这两种启动模式?

2 个答案:

答案 0 :(得分:3)

如果应用仍然在后台运行,它将首先调用onResume而不是onCreate。

如果您的意思是第一次在设备上启动它,那么使用sqlite或共享首选项来存储数据,并在开始时检查它是否存在。

答案 1 :(得分:0)

我在Oodles Technologies的Android开发工作中学习了Android的Cold Start。 让我分享一下我的知识。

启动画面也称为冷启动

启动屏幕是一项活动,会在您的应用启动时显示一段时间,并在一段时间后重定向到应用程序主要活动。

何时使用启动画面:

显示您的品牌徽标用户。 在显示启动画面时从网络或其他来源加载数据。 使用Android启动画面,以便应用程序可以在显示应用程序的其他内容之前显示其图标。 Splash还用于在应用程序中执行一些后台工作,例如在显示启动屏幕时从网络加载资源。它将为应用程序提供流畅的外观。

冷启动也称为启动画面,在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 必须是不透明的。并且背景颜色应该在主布局中填充颜色,否则 layerlist 将始终显示在活动中。< / p>

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);
    }
}