一尘不染

从Android中的AsyncTask返回值

java

一个简单的问题:是否可以返回in的值AsyncTask

//AsyncTask is a member class
private class MyTask extends AsyncTask<Void, Void, Void>{

    protected Void doInBackground(Void... params) {
         //do stuff
         return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        //do stuff
        //how to return a value to the calling method?
    }
}

然后在我的Activity/ Fragment

// The task is started from activity
myTask.execute()
// something like this?
myvalue = myTask.getvalue() 

编辑:这是很久以前我不熟悉Java的地方问的,现在我对它有了更好的了解,我将做一个简短的总结:

异步任务的要点是该任务为asynchronous,这意味着调用execute()该任务后,该任务将在其自己的线程上开始运行。从asynctask返回一个值将毫无意义,因为原始的调用线程已经进行了其他工作(因此该任务是异步的)。

考虑时间:在某个时间点,你启动了一个将与主线程并行运行的任务。当并行运行任务完成时,主线程上的时间也已过去。并行任务无法及时返回以将值返回到主线程。

我来自C,所以对此我不太了解。但是似乎很多人都在问同样的问题,所以我想我会澄清一下。


阅读 358

收藏
2020-03-21

共1个答案

一尘不染

为什么不调用处理该值的方法?

public class MyClass extends Activity {

    private class myTask extends AsyncTask<Void, Void, Void> {

        //initiate vars
        public myTask() {
            super();
            //my params here
        }

        protected Void doInBackground(Void... params) {
            //do stuff
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            //do stuff
            myMethod(myValue);
        }
    }

    private myHandledValueType myMethod(Value myValue) {
        //handle value 
        return myHandledValueType;
    }
}
2020-03-21