2011-10-19 155 views
1

我必須在應用程序中根據會話維護統計信息。問題在於,即使用戶使用後退按鈕退出應用程序,也不會關閉應用程序(可能是因爲我在後臺運行服務)。Android應用程序會話管理

我想重置我的會話信息,如果該應用程序在後臺說X分鐘(從比如說一個電話或報警相區別)。有沒有辦法做到這一點?

也許某種類型的廣播接收機來檢測事件...?

讓我試着解釋一下這個場景。我的應用程序只有在認證後才能訪問(輸入密碼)。現在一旦用戶進入這個部分,我不希望每次活動暫停時都要求用戶進行認證。但是,說用戶按下主頁鍵並在說20分鐘後返回到應用程序,我想要求認證。

編輯:我有多個活動的工作,所以我不能檢測應用程序將背景只需在onPause()設置一個標誌。

回答

4
private static boolean isApplicationGoingToBackground(final Context context) { 

     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
     if (!tasks.isEmpty()) { 
      ComponentName topActivity = tasks.get(0).topActivity; 
      if (!topActivity.getPackageName().equals(context.getPackageName())) { 
       return true; 
      } 
     } 

     return false; 
    } 

呼叫中的onStop。 onStop在onStart之後被調用,接管屏幕 - 如果它在同一個apk包中有一個活動,那麼你不會進入後臺。這確實需要GET_TASKS權限,並且如果某個活動在沒有退出的情況下出現,它仍會觸發(用戶從通知欄中選擇某些內容)。

或綁定到服務onStart &取消綁定onStop - 當所有活動都停止時,服務將被onDestroyed(或者如果您不想依賴onDestroyed來取消調用,則綁定vs取消綁定 - 因爲它可能不會。 )。

0

我不能完全肯定,但我認爲你的應用程序不會關閉,當用戶使用後退按鈕(除非你正在追趕它別的東西或是在後臺運行共享同一會話等業務中存在的應用程序偏好

反正...

要回答你的問題,有兩種簡單的方法做你想做的事:

  1. 嘗試Flurry它的工作非常好或谷歌。針對mo的分析膽汁,他們都很容易使用,他們爲你處理。

  2. 如果你想做後臺檢查,只需在活動的onPause()塊中記錄一個SharedPreference,當你的應用程序的一部分出現一個新屏幕時刷新它,同時檢查舊的已經過期(這會發生在onResume())。

+0

我可以使用Flurry/Google Analytics,但您看到我想重置的信息位於應用程序內部,與報告/跟蹤無關。 –

+0

我看到你更新了這個問題。如果您可以準確地保存記錄並以正確的方式檢測,onPause應該可以正常工作。爲了保持簡短,請使用SharedPreference保留上次活動時間並刷新它。如果你不能設置onPause(),那很好,只需設置onResume()來檢查那個時間。這總是一個有效的例子,因爲它必須被買到前臺。如果您真的不信任這種方式,請嘗試使用AlarmManager,並在每次進行交互並使未決事件使會話無效時刷新警報。有很多方法可以做到這一點,但使用偏好非常簡單。 – Edison

+0

請記住,如果您正在進行多項活動,則無關緊要。如果它們是在同一個進程上運行的同一個應用程序,通常會有一個清晰的堆棧。 – Edison