我有一个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
}
}
答案 0 :(得分:0)
当您将原始变量传递给异步任务构造器时,它会按值传递,因此对num1和num2的任何更改都不会反映在Num1和Num2上。是的,除非
1)您在异步任务内创建另一个线程,并在该线程中修改Num1和Num2。然后,您必须将它们声明为volatile并使用某种锁来限制对异步任务和创建的线程的访问。
2)您可以通过调用AsynTaskObj.Num1或AsyncTaskObj.Num2在主UI线程中访问和修改Num1和Num2。与上述情况相同。
我将Num1和Num2声明为封装专用变量。