一个简单的问题:是否可以返回in的值AsyncTask?
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:
Activity/ Fragment
// The task is started from activity myTask.execute() // something like this? myvalue = myTask.getvalue()
编辑:这是很久以前我不熟悉Java的地方问的,现在我对它有了更好的了解,我将做一个简短的总结:
异步任务的要点是该任务为asynchronous,这意味着调用execute()该任务后,该任务将在其自己的线程上开始运行。从asynctask返回一个值将毫无意义,因为原始的调用线程已经进行了其他工作(因此该任务是异步的)。
asynchronous
execute()
考虑时间:在某个时间点,你启动了一个将与主线程并行运行的任务。当并行运行任务完成时,主线程上的时间也已过去。并行任务无法及时返回以将值返回到主线程。
我来自C,所以对此我不太了解。但是似乎很多人都在问同样的问题,所以我想我会澄清一下。
为什么不调用处理该值的方法?
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; } }