0

在我的應用程序中,我已經實現了一個密碼屏幕,但是需要運行檢查以查看是否應顯示活動A或活動B,並且此檢查顯然是共享首選項的結果,打開應用程序時會出現明顯的延遲 - 代碼可以在下面看到,但是如何優化它以便更快地打開並且沒有延遲?在UI線程上Android加載共享首選項

啓動活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    boolean loggedIn = PreferenceUtils.getBoolean(LauncherActivity.this, PreferenceUtils.LOGGED_IN_STATE); 
    boolean passwordEnabled = PreferenceUtils.getBoolean(LauncherActivity.this, PreferenceUtils.APPLICATION_PASSWORD_ENABLED); 

    Log.d(TAG, "LOGGED IN: " + loggedIn + " " + "PW: " + passwordEnabled); 
    if (!loggedIn) { 
     // Start Login Activity 
     Intent intent = new Intent(LauncherActivity.this, ApplicationIntro.class); 
     startActivity(intent); 

     //PreferenceUtils.clearPreferences(LauncherActivity.this); 
    } else { 
     if (passwordEnabled) { 
      // Start Password Activity 
      Intent intent = new Intent(LauncherActivity.this, PasswordActivity.class); 
      startActivity(intent); 
     } else { 
      // Start Main Activity 
      Intent intent = new Intent(LauncherActivity.this, MainActivity.class); 
      startActivity(intent); 
     } 
    } 

    finish(); 
} 

密碼活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_password); 

    setupActionBar(); 

    setupPreferences(); 
    findViews(); 
    setupValues(); 
    setListeners(); 

} 

... 

private void setupPreferences() { 
    attemptsRemaining = PreferenceUtils.getInt(PasswordActivity.this, PreferenceUtils.APPLICATION_PASSWORD_ATTEMPTS); 
    storedPassword = PreferenceUtils.getString(PasswordActivity.this, PreferenceUtils.APPLICATION_PASSWORD); 
    duressPassword = PreferenceUtils.getString(PasswordActivity.this, PreferenceUtils.DURESS_PASSWORD); 
} 

偏好的Utils

public static void saveString(Context context, String key, String value) { 
    SharedPreferences preferences = new SecurePreferences(context); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putString(key, value); 
    editor.apply(); 
} 

public static String getString(Context context, String key) { 
    SharedPreferences preferences = new SecurePreferences(context); 
    return preferences.getString(key, ""); 
} 

public static void saveBoolean(Context context, String key, boolean value) { 
    SharedPreferences preferences = new SecurePreferences(context); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putBoolean(key, value); 
    editor.apply(); 
} 

public static boolean getBoolean(Context context, String key) { 
    SharedPreferences preferences = new SecurePreferences(context); 
    return preferences.getBoolean(key, false); 
} 

回答

1

Ť他檢查阻止UI線程,這就是爲什麼應用程序滯後。在後臺使用AsyncTaskhere is a link to AsyncTask documentation在後臺執行lagy進程是一種很好的做法。 隨意問更多的疑問。

+0

謝謝你的回覆。你能提供一些你如何建議這樣做的代碼嗎?由於我以前使用AsyncTask來加載這些值,雖然速度更快,但在密碼活動中,用戶實際上可以看到由於onPostExecute而更新的內容。如果你因此可以建議一些關於如何建議這樣做的代碼,那麼這很好 - 謝謝。另外,Launcher Activity中的onCreate是該文件中唯一的代碼,因爲它沒有視圖,而PasswordActivity有一個視圖(用戶輸入密碼和TextView的EditText) –

+0

app.when app的流程是什麼首先啓動哪個活動,然後再啓動! –

+0

啓動器活動>共享首選項檢查以查看是否顯示介紹活動或密碼活動>如果密碼活動>共享首選項獲取保存的密碼以檢查用戶的輸入 –