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);
}
謝謝你的回覆。你能提供一些你如何建議這樣做的代碼嗎?由於我以前使用AsyncTask來加載這些值,雖然速度更快,但在密碼活動中,用戶實際上可以看到由於onPostExecute而更新的內容。如果你因此可以建議一些關於如何建議這樣做的代碼,那麼這很好 - 謝謝。另外,Launcher Activity中的onCreate是該文件中唯一的代碼,因爲它沒有視圖,而PasswordActivity有一個視圖(用戶輸入密碼和TextView的EditText) –
app.when app的流程是什麼首先啓動哪個活動,然後再啓動! –
啓動器活動>共享首選項檢查以查看是否顯示介紹活動或密碼活動>如果密碼活動>共享首選項獲取保存的密碼以檢查用戶的輸入 –