Обновление Активности от AsyncTask - PullRequest
3 голосов
/ 02 июня 2011

Так что я - разработчик iOS, изучающий android, и мне трудно понять некоторые вещи. Прямо сейчас у меня есть класс datamanager. В этом классе есть AsyncTask для обновления данных. OnPreExecute Я выдвигаю активность, чтобы показать, что она обновляется. Я понимаю, что мог бы использовать дополнительные возможности для передачи начальной информации в UpdateActivity. Моя проблема в том, что я не уверен, как отправить новую информацию в OnProgressUpdate. Вот мой код опустился:

    private class myTask extends AsyncTask<Integer,String,Void>{

    @Override
    protected void onCancelled() {
        super.onCancelled();
        isUpdating = false;
    }

    @Override
    protected Void doInBackground(Integer... params) {
        //My BG Code
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Remove updating view
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Intent myIntent = new Intent(mContext,UpdateActivity.class);
        mContext.startActivity(myIntent);
    }
}

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

AsyncTask разработан, чтобы работать лучше всего, когда вложен в класс Activity.

Что делает AsyncTask «особенным», так это то, что он не просто рабочий поток - он объединяет рабочий поток, который обрабатывает код вdoInBackground(...) с методами, которые выполняются в потоке пользовательского интерфейса Activity - onProgressUpdate(...) и onPostExecute(...) являются наиболее часто используемыми.

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

Короче говоря, вместо того, чтобы запускать операцию обновления из AsyncTask, необходимо обновить само действие активности.должен иметь вложенный AsyncTask, который он использует для обработки обновления и публикации прогресса в пользовательском интерфейсе.

2 голосов
/ 02 июня 2011

У вас есть два варианта:

1) Передайте экземпляр активности вашему конструктору AsyncTask, чтобы вызвать для него какой-либо метод:

new MyTask(this).execute();

Итак, вы можете сделать:

  public MyTask (Activity activity) {
   this.activity = activity;
  }

  public void onPostExecute(...) {
   activity.someMethod();
  }

2) Передайте экземпляр Handler и отправьте сообщение из onPostExecute () в действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...