【问题标题】:Call method after async task is finished异步任务完成后调用方法
【发布时间】:2018-10-10 17:11:12
【问题描述】:

所以我有一个异步任务,它在 doInBackground 中进行一些操作,然后在 onPostExecute 中我在完成后将变量添加到 sharedpreferences 我想使用其中一些值,但它们没有更新。我需要“更新”我的活动,比如改变方向或其他东西。即使后面有一些代码,似乎最后还是执行了异步任务。

在我的活动中:

myAsyncTask.execute(location1);
System.out.println("Current_time: " + sharedPreferences.getString("CURRENT_TIME", ""));

在 ASyncTask 中的 PostExecute:

editor.putString("CURRENT_TIME", channel.getItem().getCondition().getDate());
Log.i("SetValues", "now");
editor.apply();

结果是:

I/System.out: Current_time: Mon, 30 Apr 2018 07:00 PM YEKT
I/SetValues: now

我想要的是完成异步任务然后休息,所以首先'SetValues'然后打印。

【问题讨论】:

  • 异步调用。这就是它的行为方式。当您调用 execute() 时会启动一个新线程。所以你需要在onPostExecute()中完成所有工作。

标签: android asynchronous task


【解决方案1】:

异步任务与 ui 线程分开运行。因此在执行此操作后,ui 不会等待完成此任务并继续执行其他行。在异步任务中,有一些覆盖方法,它们在不同的事件上被调用。其中之一是onPostExecute,它在异步任务的任务完成时调用,意味着doin后台方法完成。所以如果你想在一个异步任务执行后做一些事情,那么你必须这样做onPost执行方法。所以你共享prf在onPostExecute方法上工作吗.

【讨论】:

    【解决方案2】:

    如果要查看任务的结束时间,需要将当前时间的打印移动到onPostExecute。 现在它正在打印 AsyncTask 的开始时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2015-01-09
      相关资源
      最近更新 更多