0

Dans mon application, j'ai implémenté un écran de mot de passe mais une vérification doit être effectuée pour voir si l'activité A ou l'activité B doit être affichée et cette vérification est évidemment le résultat d'une préférence partagée , il ya un décalage notable lors de l'ouverture de l'application - le code peut être vu ci-dessous mais comment puis-je optimiser cela pour qu'il s'ouvre plus rapidement et sans décalage?Chargement Android Préférences partagées sur le thread UI

Launcher Activité

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

Mot de passe Activité

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

préférence 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); 
} 

Répondre

1

T Le chèque bloque le fil de l'interface utilisateur, c'est pourquoi l'application est en retard. C'est une bonne pratique pour faire le processus lagy en arrière-plan Thread en utilisant AsyncTaskhere is a link to AsyncTask documentation. N'hésitez pas à poser d'autres questions.

+0

Merci pour votre réponse. Êtes-vous en mesure de fournir un code de la façon dont vous suggéreriez de le faire? Comme j'ai utilisé AsyncTask dans le passé pour charger ces valeurs et bien que ce soit plus rapide, sur l'activité Mot de passe, l'utilisateur peut réellement voir le contenu mis à jour suite à onPostExecute. Si vous pouviez donc suggérer un code sur la façon dont vous conseilleriez de faire cela, alors ce serait génial - merci. En outre, onCreate dans l'activité Launcher est le seul code dans ce fichier car il n'a aucune vue alors que le PasswordActivity a une vue (un EditText pour l'utilisateur pour entrer le mot de passe et un TextView) –

+0

Quel est le flux de app.when app Commencer quelle activité lancer d'abord puis après! –

+0

Lanceur Activité> Préférence partagée vérifier si l'activité d'intro ou l'activité de mot de passe doit être affichée> si l'activité Mot de passe> Préférence partagée obtient le mot de passe enregistré pour vérifier l'entrée de l'utilisateur –