Android-перезапуск процесса в текущей активности из асинхронной задачи postExecute в другой - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть действие, которое позволяет пользователю загружать фотографию в Интернет, и вместо того, чтобы заставлять его ждать в течение неопределенного времени, пока изображение загружается, я выполняю это в асинхронной задаче, которая обрабатывает загрузку изображения.Когда пользователь нажимает кнопку для загрузки изображения, у меня появляется действие, которое закрывает изображение, и приложение возвращается к более раннему действию, которое имеет свой собственный процесс загрузки.Я пытаюсь выяснить, что делать в asynctask onPostExecute, чтобы процесс загрузки в другом действии снова запустился.Я попытался просто использовать это:

  @Override
  protected void onPostExecute(String result){
    if(result!=null){
    Main.DownloadManager.startDownloading();
      }else if(result==null){
       Toast.makeText(getBaseContext(),"Upload failed",timetoshow).show();
              }
          }

Но я не получаю ответа в основной активности, потому что я знаю, что я на самом деле не вызываю текущую деятельность, а просто вызываю метод ..... где-то, что не было создано или запущено.... или, по крайней мере, так я думаю.Поэтому я предполагаю, что мой вопрос заключается в том, как передать сообщение для запуска метода startDownloading () из асинхронной задачи закрытого действия в текущем действии Main.Любая помощь будет очень цениться.

РЕДАКТИРОВАТЬ:

Я смог решить эту проблему путем реализации одного из решений ниже:

 @Override
  protected void onPostExecute(String result){
    if(result!=null){
    CustomContextClass.*Main*.DownloadManager.startDownloading();
      }else if(result==null){
       Toast.makeText(getBaseContext(),"Upload failed",timetoshow).show();
              }
          }

Ответы [ 4 ]

1 голос
/ 22 ноября 2011

вы можете сделать что-то вроде ниже, если я не ошибаюсь, я думаю, что AsyncTask написал DownloadManager класс.Я надеюсь, что у вас есть AsyncTask, записанный как InnerClass, похожий на этот в этом классе.

private class InitTask extends AsyncTask<String, String, String> {....

Также у вас должен быть геттер для возврата объекта InitTask

public InitTask getInitTask(){
    return new InitTask();
}

Так что в другом классе вы можете назвать это, как показано ниже,

new YourOtherClass().getInitTask().execute();
1 голос
/ 22 ноября 2011

onProgressUpdate () из AnsycTask расскажет вам о прогрессе. Поэтому здесь вы можете решить, какие данные вы хотите отправить для следующего действия. в следующем упражнении разберитесь с оставшейся не загруженной частью. думает, что зависит от серверной реализации блока данных.

Ваше полное требование потребуется для дополнительных предложений.

1 голос
/ 22 ноября 2011

Наличие процессов, висящих вокруг мертвых. Активность опасна, так как она имеет большой потенциал вызывать утечки.Почему бы не запустить AsyncTask в Деятельности, которую вы намереваетесь показать, прогресс?Это имело бы смысл.

1 голос
/ 22 ноября 2011

Вы можете использовать статический метод в DownloadManager

private static instance;

public void onCreate() {
    instance = this;
}

public static void startDownloading() {
    instance.downloadNow();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...