我可以在.execute语句之后使用AsyncTask类的结果

时间:2016-09-03 18:53:50

标签: java android multithreading android-asynctask

假设我有一个类体:(它只是一个类的粗略设计..)

   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语句之后移动到下一个语句,还是等待后台线程完成?

2 个答案:

答案 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()