Использование общих переменных между событиями AsyncTask

голоса
0

У меня есть AsyncTaskкласс , который я хотел бы передать некоторые примитивные параметры к нему через его constructor. Затем сделать некоторые манипуляции по переменным onPreExecute(Запуск в основном потоке) метод , а затем использовать переменные внутри doInBackground(Запуск в рабочем потоке). Можно ли это сделать? Или это нужно какое - то синхронизация?

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
    }
}
Задан 27/11/2018 в 15:11
источник пользователем
На других языках...                            


1 ответов

голоса
0

Когда вы передаете в примитивных переменных в асинхронной задачи consturctor, она передается по значению так что любые изменения в num1 и num2 не отражаются на Num1 и NUM2. Так что да, это нормально, если

1) Вы можете создать еще один поток внутри задачи асинхронном и изменять Num1 и NUM2 в этом потоке. Тогда вы должны объявить их неустойчивыми и использовать какие-то замки, чтобы ограничить доступ для выполнения этой задачи асинхронном и созданного потока.

2) Вы можете получить доступ и изменять Num1 и NUM2 в главном потоке пользовательского интерфейса, вызвав AsynTaskObj.Num1 или AsyncTaskObj.Num2. Такая же ситуация, как и выше.

Я хотел бы объявить Num1 и NUM2 как частные переменные для капсулирования.

Ответил 27/11/2018 в 15:33
источник пользователем

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