Подтвердить что ты не робот

Как можно переносить AsyncTask с Android на Java?

AsyncTask очень полезен для синхронизации между потоком пользовательского интерфейса и другими потоками в Android. Поэтому я прочитал его исходный код и попытался портировать java classic (JDK), но не успел, потому что некоторые классы не существуют в java (Message, Handler..).
Я хотел бы создать класс с некоторыми полезными функциями, такими как AsyncTask (который может синхронизироваться между основным потоком и другими потоками):

    doInBackground(Params... params)
    onProgressUpdate(Progress... values)
    onPostExecute(Result result)
    publishProgress(Progress... values)
    onPreExecute()
    onCancelled()

Есть ли способ попробовать это?

4b9b3361

Ответ 1

1. AsyncTask специально разработан для андроида для синхронизации потока пользовательского интерфейса и потока без UI, также известного как Нержавеющая резьба.....

2. В Java есть альтернатива AsyncTask, названная SwingWorker.

См. эту ссылку для простого базового учебника:

http://kodejava.org/how-do-i-use-swingworker-to-perform-background-tasks/

Ответ 2

Согласовано, что SwingWorker является самым прямым аналогом AsyncTask

Если вы не используете Swing, другой параметр - ThreadPoolExecutor: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html

Вот статья, демонстрирующая использование ThreadPoolExecutor для создания нескольких фоновых потоков: http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html

Истекает один фоновый поток, который запускается и завершается без обновления прогресса (что также является общим использованием AsyncTask в Android), может быть таким же простым, как:

Executors.newSingleThreadExecutor().execute(new Runnable() {
  @Override
  public void run() {
    // do stuff in background
  }
});

Ответ 3

Я использую шаблон проектирования Observer для аналогичной ситуации. После нереста фонового потока основной поток переходит в спящий режим. Когда фоновый поток заканчивает асинхронную задачу, он просыпает основной поток сообщением обратного вызова. Это существенно удаляет блок для объекта синхронизации, ожидающего обратного вызова.