2011-08-08 45 views
1

我需要統計用戶啓動應用程序的次數。我將該值存儲在共享首選項中,並將計數邏輯置於onCreate()之內。Android:應用程序啓動次數

現在,由於onCreate()在許多不同的情況下被調用,並非所有情況都包括用戶實際啓動應用程序,所以我使用已保存的實例狀態包來存儲在OnSaveInstanceState()中設置的標誌 - 如果標誌缺席,我認爲用戶手動啓動應用程序。

這是必要的,還是隻是檢查一個null捆綁傳遞給onCreate()夠了?無論如何,爲什麼?

回答

0

首先,謝謝大家的回答。他們都有所幫助。這就是說,經過多次嘗試和不同的方法,我認爲沒有實際的100%可靠的方式來確定用戶何時啓動應用程序。沒有一個活動生命週期回調可以真正用於解決問題,無論是單獨還是組合。

我得到的最接近的數字是onResume()電話的數量,然後從onPause()減去它的數量取決於isFinishing()的回報。然而,這種方法並沒有考慮主頁按鈕,也許用戶可以做其他事情來隱藏應用程序。

我會更新這個答案,如果我找到一種方法可靠地做到這一點。

+0

如果您希望在用戶付費之前限制用戶對您的應用程序的訪問,是否還有一些與您可以記錄和限制的應用程序的其他交互? –

1

你可以想想另一種方式......每次調用onDestroy()時增加計數器。這樣你就可以保證程序實際上內存不足了,而且計數器最多隻會減1。

只是拋出一個想法,希望它給你一些你自己的!

+2

不想讓櫃檯上去?拉電池! – Rob

+0

他們試圖在我身上刺探!I GOTTA PULL BATTERY – Codeman

2

您可以致電getCategories()查看是否包含LAUNCHER類別。

+0

如果用戶從應用程序導航離開應用程序然後返回而不重新啓動,它將不包含LAUNCHER類別? – slezica

+0

不幸的是,我不確定,但那對你來說很容易測試。 –

+0

如何?據我的理解,onCreate可能會或可能不會再被調用 - 也許只是onResume,也許不會。 – slezica

1

A null檢查onCreate()應該工作得很好。無需在onSaveInstanceState()中設置單獨的標誌。有一個可能的問題,但。

假設用戶將您的應用程序置於後臺(通過按Home鍵)。申請過程最終會被殺死。當用戶重新啓動應用程序時,您將在設置了標誌的onCreate()中收到一個合適的Bundle對象。用戶可以通過每次簡單地爲應用程序進行背景來防止計數器增加。

如果backgrounding可能是一個問題,你可以嘗試這樣的:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (getLastNonConfigurationInstance() == null) { 
     counter++; 
    } 
} 

public Object onRetainNonConfigurationInstance() { 
    return new Object(); 
} 

我以前使用上面的代碼,它工作在埃克萊爾,升級Froyo和薑餅。在Honeycomb中,似乎getLastNonConfigurationInstance()onRetainNonConfigurationInstance()已被標記爲不贊成使用,因此我不確定在針對Honeycomb時它將如何工作。