在AsyncTask事件之间使用共享变量

时间:2018-11-27 15:11:49

标签: android multithreading android-asynctask

我有一个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
    }
}

1 个答案:

答案 0 :(得分:0)

当您将原始变量传递给异步任务构造器时,它会按值传递,因此对num1和num2的任何更改都不会反映在Num1和Num2上。是的,除非

1)您在异步任务内创建另一个线程,并在该线程中修改Num1和Num2。然后,您必须将它们声明为volatile并使用某种锁来限制对异步任务和创建的线程的访问。

2)您可以通过调用AsynTaskObj.Num1或AsyncTaskObj.Num2在主UI线程中访问和修改Num1和Num2。与上述情况相同。

我将Num1和Num2声明为封装专用变量。