2013-08-22 82 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); 
    } 
}