Вызов метода после завершения асинхронной задачи - PullRequest
0 голосов
/ 30 апреля 2018

Итак, у меня есть Async Task, которая выполняет некоторую операцию в doInBackground, а затем в onPostExecute. После завершения я добавляю переменные в sharedpreferences. Я хочу использовать некоторые из этих значений, но они не обновляются. Мне нужно «обновить» свою деятельность, например, изменить ориентацию или что-то в этом роде. Похоже, что асинхронная задача выполняется в конце, даже после кода есть какой-то код.

По моей активности:

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

В ASyncTask onPostExecute:

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», а затем напечатайте.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Асинхронная задача запускается отдельно от пользовательского потока. Так что после ее выполнения пользовательский интерфейс не ждет завершения этой задачи и продолжает выполнять другие строки. В асинхронной задаче есть метод перегрузки, который вызывается для другого события. Один из них isPostExecute, который вызывается, когда задача асинхронной задачи завершена, значит, фоновый метод doin завершен. Так что, если вы хотите сделать что-то после одного выполнения асинхронной задачи, то вы должны сделать этот метод выполнения onPost. Итак, вы делитесь prf с методом onPostExecute .

0 голосов
/ 30 апреля 2018

Вам нужно переместить печать текущего времени на onPostExecute, если вы хотите увидеть время окончания задачи. Сейчас он печатает время запуска AsyncTask.

...