假设我有一个类体:(它只是一个类的粗略设计..)
class XYZ
{
//Some Code here
submitBTN.setOnClickListener(..){
ABC obj=new ABC();
obj.execute();
Toast(obj.result).show();
}
class ABC extends AsynTask<String,Void,String>{
String result=null;
..
..
doInBackground(..){
..
..
return "success";
}
onPostExecute(String result){
this.result=result;
}
}
}
我的问题是Toast会显示“成功”还是会显示“null”; 因为我们在后台开始另一个线程 所以obj.execute是否是阻止语句 我的意思是控件会在.execute语句之后移动到下一个语句,还是等待后台线程完成?
答案 0 :(得分:0)
控件将转向toast,因为Asyctask任务在自己的线程中执行。但obj.result会给出null结果,因为你不能保证在吐司执行之前会设置结果。
答案 1 :(得分:0)
您可以使用界面
public interface OnStuffDone{
void onResult(String result);
}
public AsyncTask<String,Void,String> abc (OnStuffDone onStuffDone){
return new AsyncTask<String,Void,String>
...
doInBackground(..){
...
return "success";
}
onPostExecute(String result){
onStuffDone.onResult(result);
}
}
abc(new OnStuffDone
...
@Override
public void onResult(String result){
//Show result
}
).execute()