我需要統計用戶啓動應用程序的次數。我將該值存儲在共享首選項中,並將計數邏輯置於onCreate()
之內。Android:應用程序啓動次數
現在,由於onCreate()
在許多不同的情況下被調用,並非所有情況都包括用戶實際啓動應用程序,所以我使用已保存的實例狀態包來存儲在OnSaveInstanceState()
中設置的標誌 - 如果標誌缺席,我認爲用戶手動啓動應用程序。
這是必要的,還是隻是檢查一個null
捆綁傳遞給onCreate()
夠了?無論如何,爲什麼?
我需要統計用戶啓動應用程序的次數。我將該值存儲在共享首選項中,並將計數邏輯置於onCreate()
之內。Android:應用程序啓動次數
現在,由於onCreate()
在許多不同的情況下被調用,並非所有情況都包括用戶實際啓動應用程序,所以我使用已保存的實例狀態包來存儲在OnSaveInstanceState()
中設置的標誌 - 如果標誌缺席,我認爲用戶手動啓動應用程序。
這是必要的,還是隻是檢查一個null
捆綁傳遞給onCreate()
夠了?無論如何,爲什麼?
首先,謝謝大家的回答。他們都有所幫助。這就是說,經過多次嘗試和不同的方法,我認爲沒有實際的100%可靠的方式來確定用戶何時啓動應用程序。沒有一個活動生命週期回調可以真正用於解決問題,無論是單獨還是組合。
我得到的最接近的數字是onResume()
電話的數量,然後從onPause()
減去它的數量取決於isFinishing()
的回報。然而,這種方法並沒有考慮主頁按鈕,也許用戶可以做其他事情來隱藏應用程序。
我會更新這個答案,如果我找到一種方法可靠地做到這一點。
在onCreate
方法中,包含一個檢查Activity#getCallingActivity
。如果應用程序未從其他活動啓動,則返回null
。
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時它將如何工作。
如果您希望在用戶付費之前限制用戶對您的應用程序的訪問,是否還有一些與您可以記錄和限制的應用程序的其他交互? –