En utilisant des variables partagées entre les événements AsyncTask

voix
0

J'ai une AsyncTaskclasse que je voudrais passer quelques paramètres primitifs à travers son constructor. Ensuite , faites quelques manipulations sur les variables onPreExecute( en cours dans le thread principal) méthode, puis utiliser les variables à l' intérieur doInBackground(Courir dans un thread de travail). Est - il correct de faire cela? Ou il a besoin une sorte de synchronisation?

private class MyClass extends AsyncTask<Void, Void, Void> {
    //shared variables
    Long Num1;
    int Num2;

    private MyClass (Long num1, int num2){
        Num1 = num1;
        Num2 = num2;
    }

    @Override
    protected void onPreExecute() {
        //do some changes on Num1 & Num2
    }


    @Override
    protected Void doInBackground(Void... voids) {
        //Use Num1 and Num2
    }
}
Créé 27/11/2018 à 15:11
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Lorsque vous passez dans les variables primitives dans la consturctor tâche async, il est passé par valeur de sorte que toute modification de num1 et num2 ne sont pas répercutées sur Num1 et Num2. Alors oui, il est bien moins

1) Vous créez un autre thread dans la tâche async et de modifier Num1 et Num2 dans ce fil. Ensuite, vous devez les déclarer volatils et utiliser une sorte de serrures pour restreindre l'accès à la tâche async et le fil créé.

2) Vous pouvez accéder et modifier Num1 et Num2 dans le thread principal de l'interface utilisateur en appelant AsynTaskObj.Num1 ou AsyncTaskObj.Num2. Même situation que ci-dessus.

Je déclare Num1 et Num2 comme des variables privées pour l'encapsulation.

Créé 27/11/2018 à 15:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more