0

我有一个与 MainActivity 分开的 AsyncTask 类。

protected void onPostExecute(ArrayList<String> result) {
          System.out.println("flag1");
          MainActivity.myLst=new ArrayList<String>();
          MainActivity.myLst=result;
}

然后我的 MainActivity 中有以下代码。

public void onCreate(Bundle savedInstanceState) {
    new AsyncTask().execute();
    System.out.println("flag2");
    System.out.println(myLst.size());
}

程序首先输出 flag2,myLst.size 为 0。如果我对其他活动持否定态度,然后返回主活动,并且 myList.size 具有正确的大小。我认为它应该在 MainActivity 之前输出所有内容并在 AsyncTask 中完成工作。

4

5 回答 5

3

AsyncTask不会“在 MainActivity 之前完成工作”,这会破坏AsyncTask.

您要做的是编写一个接口以将值传递回您的活动。这个答案有一个很好的例子。

于 2013-08-01T14:27:14.367 回答
3

您正在创建一个 AsyncTask 来异步执行操作。

你对另一个线程说它有工作要做,但你不是在等待他的结果来做你的,这就是为什么“flag2”写在另一个之前。

如果你想等待结果,你需要实现一个回调onPostExecute()

于 2013-08-01T14:28:57.460 回答
1

您可以只覆盖onPostExecute()调用 Asynctask 的代码中的方法。

例如,您有一个名为 myAsyncTask 的 AsyncTask。然后在你的活动中这样做:

new myAsyncTask() {

        @Override
        protected void onPostExecute( Result result ) {

            super.onPostExecute( result );
            // Do something with result here
        }
    }.execute(value1);

我有同样的问题,我想在一个片段中得到结果......看看这个话题

于 2013-08-01T15:11:06.400 回答
1

异步意味着它可能是乱序的。异步任务通常会启动另一个线程,该线程与主线程并行或在后台完成工作。你绝对不能假设异步任务会在 execute() 返回时完成!

于 2013-08-01T14:31:04.970 回答
1

就像其他人所说的那样,就像我在你的帖子的评论中所说的那样,异步意味着异步,在你的情况下意味着它可能会在完成异步任务之前完成 onCreate 代码。

要么将 AsyncTask 类放在 MainActivity 中(并调用一些方法在 PostExecute 上打印),要么在活动中实现 Observing/Observer 样式,以便能够通知主活动异步任务结束。

于 2013-08-01T14:31:57.087 回答