我正在建立一個須要登陸的應用程序。 我建立了主要和登陸活動。 android
在主要活動onCreate
方法中我添加了如下條件: 數組
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ... loadSettings(); if(strSessionString == null) { login(); } ... }
登陸表單終止時執行的onActivityResult
方法以下所示: app
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case(SHOW_SUBACTICITY_LOGIN): { if(resultCode == Activity.RESULT_OK) { strSessionString = data.getStringExtra(Login.SESSIONSTRING); connectionAvailable = true; strUsername = data.getStringExtra(Login.USERNAME); } } }
問題是登陸表單有時會出現兩次( login()
方法被調用兩次),當手機鍵盤滑動時,再次出現登陸表單,我猜問題是變量strSessionString
。 ide
有沒有人知道如何設置變量global以免在用戶已經成功驗證後出現登陸表單? spa
就像上面討論的那樣OS能夠在沒有任何通知的狀況下殺死APPLICATION(沒有onDestroy事件),因此沒有辦法保存這些全局變量。 code
SharedPreferences多是一個解決方案,除了你有COMPLEX STRUCTURED變量(在個人例子中,我有整數數組來存儲用戶已經處理過的ID)。 SharedPreferences的問題在於,每次須要值時都很難存儲和檢索這些結構。 視頻
在個人狀況下,我有一個後臺服務,因此我能夠將這些變量移動到那裏,由於服務有onDestroy事件,我能夠輕鬆保存這些值。 進程
您可使用Intents,Sqlite或共享首選項。 對於媒體存儲,如文檔,照片和視頻,您能夠改成建立新文件。 事件
我找不到如何指定應用程序標籤,但通過大量的谷歌搜索後,從清單文件docs中能夠看出:除了應用程序節中的默認圖標和標籤外,還使用了android:name。 文檔
android:name爲應用程序實現的Application子類的徹底限定名稱。 啓動應用程序進程時,將在任何應用程序的組件以前實例化此類。
子類是可選的; 大多數應用程序不須要一個。 在沒有子類的狀況下,Android使用基本Application類的實例。
class GlobaleVariableDemo extends Application { private String myGlobalState; public String getGlobalState(){ return myGlobalState; } public void setGlobalState(String s){ myGlobalState = s; } } class Demo extends Activity { @Override public void onCreate(Bundle b){ ... GlobaleVariableDemo appState = ((GlobaleVariableDemo)getApplicationContext()); String state = appState.getGlobalState(); ... } }
在恢復以前調用活動結果。 所以,將登陸檢查移至恢復狀態,一旦secomd活動返回確定結果,您的第二次登陸就會被阻止。 每次都會調用簡歷,所以沒必要擔憂第一次沒有調用它。