java - Android 在 UI 线程上加载共享首选项

标签 java android android-intent android-activity android-sharedpreferences

在我的应用程序中,我已经实现了密码屏幕,但需要运行检查以查看是否应显示 Activity A 或 Activity B,并且此检查显然是共享首选项的结果,但是,打开时存在明显的滞后应用程序 - 代码如下所示,但我如何优化它以使其打开更快且没有延迟?

启动器 Activity

@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();
}

密码 Activity

@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);
}

首选项实用程序

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);
}

最佳答案

检查阻塞了 UI 线程,这就是应用程序延迟的原因。使用 AsyncTask 在后台线程中执行延迟进程是一个很好的做法 here is a link to AsyncTask documentation 。 请随时提出进一步的疑问。

关于java - Android 在 UI 线程上加载共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575260/

相关文章:

c# - monodroid中Task的实现

java - Spring 在所需的 bean 之前加载组件

android - 使用 "."在 Activity 之间传递变量

android - 如何在 android 中将 linkedList<customizedType> 从 Activity A 传递到 Activity B

android - 如何在 android 中播放我的 youtube 帐户中的视频

java - 两个线程将对象添加到 ArrayList : can't output the size: Why does removing println lead to an infinite loop

java - java中如何限制每行的字符数?

android - 使用 Dagger 注入(inject)泛型类

javascript - 如何在 WebView 中扩展 JavaScript 控制台(以匹配 ConsoleMessage.MessageLevel)

java - 为什么 .apk 没有安装在 Android 模拟器中?