2015-02-13 2 views
0

Когда AsyncTask закончил работу, я хочу вызвать метод onResume(). AsyncTask не встроен в мою деятельность - это отдельные классы, поэтому я не могу вызвать метод onResume() в рамках метода onPostExecute().
Как я могу что-то сделать после завершения работы AsyncTask

Как подождать, когда конец AsyncTask вызовет метод onResume()?

Большое спасибо за ваши ответы, я решил проблему.

+0

Почему вы не передаете ссылку на деятельность в конструкторе, так что вы можете вызвать любой метод его, когда дело сделано? –

ответ

1

Думаю, вам стоит взглянуть на смысл метода onResume().

http://developer.android.com/training/basics/activity-lifecycle/starting.html

Этот метод вызывается всего жизненного цикла деятельности, так что вы не должны делать вызов этого метода в коде. Просто переопределите их comportament, если вам нужно сделать некоторую логику в этой точке жизненного цикла деятельности.

Тем не менее, если вы хотите вызвать метод Activity в классе, который вы встроили в AsyncTask, вы можете передать контекст или полную активность в качестве параметра конструктора этого класса. Взгляните на этот ответ:

How to call parent activity function from ASyncTask?

+0

Спасибо, я знаю жизненный цикл деятельности. Но ваш метод не решает проблему - и поэтому я отправил контекст в конструкторе AsuncTask, но вы не можете вызвать onCreate внутри AsyncTask. Это должно как-то сделать основной поток. – Fredisson

+0

В чем смысл вызова onCreate после фоновой работы? Вы хотите отменить свою деятельность? –

0

вы можете использовать интерфейс, который можно реализовать на пост выполнить

пример:

public class DownloadFileUsingAsync extends AsyncTask<String, String, String> { 


public interface OnTaskCompleted { 
    void onTaskCompleted(String str); 
    void onTaskFailure(String str); 
} 
private OnTaskCompleted listener; 

public DownloadFileUsingAsync(OnTaskCompleted listener,File folderPath,String fileName, 
     String data, String method, 
     int timeout) { 
    this.listener = listener; 

} 

@Override 
protected String doInBackground(String... params) { 
    //doInBackground 
} 

@Override 
protected void onPostExecute(String fileUrl) { 
    if (listener != null) { 
     listener.onTaskCompleted(fileUrl); 
    } 

} 

@Override 
protected void onPreExecute() { 
} 

protected void onProgressUpdate(Void... values) { 
} 

}

вызова aynctask

 new DownloadFileUsingAsync(listener,folder,docname, null, "GET", 
      10000).execute(docUrl); 

и на пост Execute вы можете обрабатывать слушателя, как это:

private OnTaskCompleted listener = new OnTaskCompleted() { 
    //write here 

    } 
    /** 
    * onTaskFailure method for load base image failure callback. 
    * 
    */ 
    public void onTaskFailure(final String error) { 
     //handle error 

    } 
}; 
+0

Да, я думаю, что это правильное решение, но оно слишком громоздко для небольших операций (как и у меня). – Fredisson

Смежные вопросы