2014-09-13 50 views
2

我有一個android應用程序,需要用戶登錄憑據才能訪問某些數據。我想要做的是當用戶決定退出整個APP而不是一個Activity時,如果非活動時間超過20秒,它將調用註銷方法。因此,我需要一個運行的代碼,它能夠檢查應用程序在後臺,這個程序應該恭維做下面的代碼:當應用程序在後臺運行註銷方法

IdleLogout方法:

public void IdleLogout(){ 
     Log.i("RootActivity:IdleLogout()","******APP LOGGEDOUT******"); 
     SharedPreferences pref = getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE);    
     SharedPreferences.Editor editor = pref.edit(); 
     editor.clear();  // CLEAR ALL FILEDS 
     editor.commit(); // COMMIT CHANGES 
     setloginButton(); // Change logout button to login 
     RootActivity.alertDialog(RootActivity.this,getCustomIntent(PropertyActivity.class)).create().show(); 
     //startActivity(getCustomIntent(PropertyActivity.class)); //Return page to PROPERTYACTIVITY.  
    } 

WLL利用當前的活動時間

@Override 
    public void onStop(){ 
     super.onStop(); 
     //get the current time on exit 
     curDate = new Date(); 
     Log.i("RootActivity:onStop()","******curDate=******"+curDate); 
    } 

將採取活動時用戶恢復應用

@Override 
    protected void onResume() { 
     super.onResume(); 
     setloginButton(); 
     EnquiryActivity.PROPERTY = 0; 
     //EDITED FOR SESSION LOGOUT 
     //Get the Resume Time 
     resumeDate = new Date(); 
     Log.i("RootActivity:onResume()","******resumeDate=******"+resumeDate); 
     long diff = resumeDate.getTime() - curDate.getTime(); 
     long secInt = diff/1000 % 60; //conversion of milliseconds into human readable form 
     Log.i("RootActivity:onResume()","******sectInt=******"+secInt); 
     if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT 
      IdleLogout(); 
     } 
    } 

回答

1

你什麼需要執行一個服務,該服務在後臺運行並且您的應用可以與之通信。爲此,您應該在您的Application.onCreate(...)方法中啓動該服務。然後,您應該創建一個基本活動(您的活動將繼承),並實施onPause和onResume方法以向服務發射Intent,以表明它們已進入onPause/onResume。

onPause(...)應該指示服務開始倒計時(20秒左右)。

onResume(...)內發射的意圖應指示服務取消倒計時。

當你的最後一次活動進入的背景下,的onPause()方法而沒有後續觸發的onResume(這將取消倒計時)被觸發,導致會話如果時間流逝被清除。

如果onStop被調用,您將無法在活動中顯示對話框(因爲它已經被銷燬),所以我鼓勵您使用Theme.Dialog的活動它)。

您可以使用LocalBroadcastManager您的服務進行通信,並且不要忘了在你的Service.onCreate(...)編程設置的廣播接收器。

瞭解代碼並不總是最好的答案。

希望它可以幫助你獲得更多的Android平臺的見解。

問候。

+0

當然,我的朋友。這是我成功使用我的應用程序的方式。 – 2014-09-13 04:46:38

+0

你有多個活動?如果是這樣,它們中的每一個都應該從在onPause和onResume內部發送廣播的自定義創建的活動中擴展。第一個告訴服務開始倒計時,後者告訴服務取消倒計時(如果有的話)。使用Intents進行溝通,因爲它是一種快速,安全和簡單的方式。 – 2014-09-13 04:48:15

+0

是的,我確實有多項活動,我想澄清一下我對你寫的內容的理解,我真的很困惑。你是否指的是我開始實施 - >公共靜態類MyApplication擴展應用程序,然後將調用activityResume和activityPaused? – 2014-09-13 04:56:29

相關問題