5

应用启动时,如何判断是不是冷启动?冷启动是指应用程序从一开始就启动,而不是从以前的状态恢复。

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

4

2 回答 2

5

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

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

于 2013-09-03T20:46:15.037 回答
2

我在 Oodles Technologies 从事 Android 开发工作时了解了 Android 中的冷启动。让我分享我的知识。

启动画面也称为冷启动

启动画面是一种活动,当您的应用程序启动时会显示一段时间,并在一段时间后重定向到应用程序主活动。

何时使用闪屏:

向用户展示您的品牌标志。在显示闪屏时从网络或其他来源加载数据。使用 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将始终显示在活动中。

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 回答