2013-08-22 30 views
2

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

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

+0

你能更多地讨论你想要什么? –

+0

@ shree202我试图找到应用程序的启动模式:冷启动或热启动。冷启动意味着应用程序从未在启动之前启动或不启动,因此需要完全启动。热启动意味着它仍然在后台,所以它可以恢复并开始更快。如何以编程方式区分这两种启动模式? –

回答

3

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

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

+0

有没有办法从我的应用程序中知道其他应用程序的启动模式? @ firesoul453 –

+0

没有。所有的应用程序都是沙盒并独立运行。但是,如果您制作两个不同的应用程序,则可以共享数据。 – DisibioAaron

0

我在Oodles Technologies的Android Development上学习了Android的Cold Start。 让我分享我的知识。

开机画面也被称为冷启动

闪屏是一种活动,将显示一段时间,当你的应用开始,一段时间后重定向到应用程序的主要活动。

当使用闪屏:

为了显示自己的品牌标识使用者。 在显示启动画面时从网络或其他来源加载数据。 使用Android启动画面,以便应用程序可以在显示应用程序的其他内容之前显示其图标。 Splash还用于在应用程序中执行一些后台工作,例如在显示启动画面时从网络加载资源。它会让应用程序看起来很流畅。

冷启动也被称为闪屏,启动屏幕或冷启动在每个我看来android.As,用户应该尽快有可用的内容有应用,但是当用户启动一个应用程序,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); 
    } 
}