0

Я учусь разработки Android приложения с Udacity.com инженерами Google, и они сказали,Каковы преимущества и недостатки AsyncTask в платформе Android?

«Это не очень хорошая идея использовать„AsyncTask“, как он не привязан к activity жизненного цикла. Виртуальная машина будет метод держаться за activity объекта до тех пор, как Asynctask работает, даже после того, как Android назвала OnDestroy() для деятельности и ожидает, что он будет отброшен.

Если повернуть телефон, поведение уничтожить ток активность и создать новый экземпляр. У наивной реализации AsyncTask теперь есть два threads, пытающихся сделать то же самое обновление. Так что это не лучший пат для потенциально очень продолжительной работы фона, например, выбор из веб-служб. Если вы покинете приложение, то asyncTask будет работать до тех пор, пока процесс будет сохранен в памяти, но будет работать с более низким приоритетом, и ваш процесс будет первым, что нужно убить, если устройству требуется больше ресурсов. "

1) При использовании AsyncTask невыгодна, почему он был создан? Что бы философия дизайна или причиной для его создания, несмотря на наличие услуг (или что-то подобное, чтобы достичь такой же функциональности)?

2) Какие ситуации, когда Asynctask должны быть использованы для улучшения по сравнению с Services/похожих вариантов, доступных в Android?

3) Какие ситуации/места Asynctask никогда не должны быть использованы?

Пожалуйста, не downvote этот квест п. Я искал Stackoverflow, и я не мог найти аналогичный вопрос.

ответ

-3

Преимущества и недостатки Asynctask?

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

Преимущество:

1 простой, быстрый

2 управления процессом

3 DISA dvantages использования:

Недостатки: при использовании нескольких асинхронных операций и, а также необходимость изменения Ui, станут более сложными

Android AsyncTask Handler более легкий, подходит для асинхронной обработки просто. Первым явным Android является Handler и AsyncTask, не блокировать основной поток (поток пользовательского интерфейса), а обновления пользовательского интерфейса завершены только в основном потоке, поэтому асинхронная обработка неизбежна

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

AsyncTask наследует от класса Object позицию android.os.AsyncTask.Чтобы использовать AsyncTask, мы должны предоставить три общих параметра, несколько перегрузок методов и (по крайней мере, перегрузку)

AsyncTask определяет три типа общих типов Params, Progress и Result.

Параметры позволяют выполнять выполнение параметров входных параметров, таких как URL-адрес HTTP-запроса. Процент фоновых задач Прогресс. Результат фоновой миссии в конечном итоге возвращает результаты, такие как String. Использование одноклассников AsyncTask знает, по крайней мере, для того, чтобы переписать следующие два метода асинхронными данными загрузки:

doInBackground (Params ...) Здесь можно выполнить фоновое выполнение, отнимать много времени. Обратите внимание, что нет прямого доступа к пользовательскому интерфейсу. Этот метод выполняет фоновый поток, основная работа для выполнения задачи, часто занимает много времени. В процессе реализации можно вызвать publicProgress (Прогресс ...), чтобы обновить ход выполнения задачи. onPostExecute (Результат) Эквивалент пользовательского интерфейса обработчика, в котором doInBackground может использоваться в результатах, полученных из пользовательского интерфейса обработки. Этот метод выполняется в основном потоке, результаты выполнения задачи при возврате параметров к этому методу При необходимости вы должны переписать следующие три метода, но не обязательно:

onProgressUpdate (Progress ...) Вы можете использовать индикатор выполнения увеличивает пользовательский интерфейс. Этот метод выполняется в основном потоке, который используется для отображения расписания выполнения задачи. onPreExecute() Здесь конечный пользователь, вызывающий интерфейс Excute, при вызове этого метода запускает задачу перед выполнением, может отображать диалоговое окно выполнения здесь. onCancelled() Пользователь требует, чтобы отменить, нужно сделать использовать класс AsyncTask, следующие несколько должны соблюдать правила:

экземпляры задачи должны быть созданы в потоке пользовательского интерфейса, Выполнить метод должен быть вызываемый в потоке пользовательского интерфейса, Не вызывайте руководство onPreExecute (onPostExecute), (Результат), doInBackground (Params ...), onProgressUpdate (Прогресс ...) этот метод, Задача может выполняться только один раз, иначе называемый многими время будет ненормальным,

Принцип асинхронной реализации двух обработчиков и применение преимуществ и недостатков

В асинхронной реализации Handler, связанной с обработчиком, Looper, Message, Thread four object, Реализация асинхронных процессов - это основной поток для запуска Thread (Zi Xiancheng) à thread (Zi Xiancheng), запускающий и генерирующий Message-Mail Looper получает сообщение и передается обработчику-обработчику Looper для получения сообщения и изменения пользовательского интерфейса.

Использование преимуществ:

1 четкой структуры, функции определения

2 для нескольких фоновых задач, простые, четкие

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

Преимущества и недостатки AsyncTask и потока выполняют асинхронную задачу, где ссылочный пример суммируется ниже?

public class TestActivity extends Activity{ 
@Override 
protected void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
(newLoadAsyncTask()).execute(1000); 
} 
/** 
private class LoadAsyncTask extends AsyncTask<Integer,Integer,String>{ 
@Override 
protected void onPreExecute(){ 
Log.v("TestActivity","Began to implement the asynchronous thread"); 
} 
/** 
* The first parameter to the Integer parameters of the corresponding AsyncTask here in 
* The third parameter here the return value of the String corresponding to AsyncTask 
* The method is not running on the UI thread, mainly used for asynchronous operation, all not in the method of UI space setting and modification 
*/ 
@Override 
protected String doInBackground(Integer...params){ 
// To load the network data 
} 
@Override 
protected void onPostExecute(Stringresult){ 
Log.v("TestActivity","The end of execution of the asynchronous thread"); 
// Update UI 
} 
} 
} 
Through the thread+Runnable+handler 
public class TestActivityextends Activity{ 
private threadHandler handler; 
@Override 
public voidonCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
// The initialization handler 
handler=new threadHandler(this); 
// Open a new thread 
newThread(newRunnable(){ 
@Override 
public void run(){ 
// To load the network data 
updateUI(); 
} 
}).start(); 
} 
static class threadHandler extends Handler{ 
private WeakReference<TestActivity>testReference; 
public threadHandler(TestActivity activity){ 
testReference=new WeakReference<TestActivity>(activity); 
} 
@Override 
public void handleMessage(Message msg){ 
super.handleMessage(msg); 
TestActivity test= testReference.get(); 
// Update UI 
} 
} 
public voidupdateUI(){ 
// Other treatment 
handler.sendEmptyMessage(0); 
} 
} 

Эти 2 режима могут быть реализованы, но где разница между ними? Какие преимущества и недостатки?

(1), AsyncTask - это пакетный пул потоков. По сравнению с методом Thread + Handler поток пользовательского интерфейса AsyncTask более удобен в работе, потому что onPreExecute(), onPostExecute (onProgressUpdate) и обновляет UI-метод() запускаются в основном потоке, поэтому вам не нужно обрабатывать сообщения обработчика, (2), я не совсем согласен с хорошим пакетом, что повлияет на производительность аргументации. При использовании моей практики глобальная нить пустая реальная слабость возникает только из 5 рабочих потоков AsyncTask, то есть APP, если использование технологии AsyncTask для потока выполнения, тогда в то же время может быть до 5 потоков, выполняемых одновременно, другой поток будет заблокирован (обратите внимание: не используйте поток выполнения AsyncTask, New из его потока не зависит от этого ограничения), поэтому AsyncTask не используется для многопоточных и сетевые данные, потому что вполне вероятно, что он будет генерировать блокировку, тем самым снижая эффективность.

Три. Является ли одновременная 100 + асинтеза? AsyncTask использует механизм пула потоков, емкость 128, одновременно работает 5 основных потоков, остальная часть очереди.

+1

Ничего себе, вы просто скопировали его из [здесь] (http://www.programering.com/a/MTO1kjNwATA.html). Пожалуйста, объясните это своими словами. – Enzokie