Возможно ли, что ОС Android может по какой-то причине отложить или приостановить мою асинтезку. Если да, то что я могу сделать, чтобы моя задача (например, выборка данных из базы данных) не была отложена или приостановлена. Возможно, запустите его в потоке пользовательского интерфейса, но я прочитал, что это не очень хорошая идея, так как он может заморозить пользовательский интерфейс и вызвать задержку.Может андроид задержать или приостановить мою задачу асинхронного?
ответ
Возможно ли, что ОС Android может отложить или приостановить свою AsyncTask по какой-то причине.
Может быть заблокирован другим экземпляром AsyncTask
. По умолчанию они работают на одном фоновом потоке: https://developer.android.com/reference/android/os/AsyncTask.html
Если это так, что я могу сделать, чтобы гарантировать, что моя задача (например выборки данных из базы данных) не задерживается или приостановить.
Исследуйте, что именно вызывает задержку. Это что-то внутри метода doInBackground
или, может быть, задержки происходят до или после фоновой операции. Это может быть что угодно, трудно сказать, не отлаживая код.
Запустите его в потоке пользовательского интерфейса, возможно, но я прочитал, что это не очень хорошая идея, так как он может заморозить пользовательский интерфейс и вызвать задержку.
Хотя AsyncTask
не является хорошим решением в этом случае, он должен работать нормально, если вы его правильно реализуете. Другие подходы к рассмотрению будут Loader
с, или AsyncQueryHandler
с ContentProvider
. Зависит от вашего варианта использования.
U не совсем правы, AsyncTask использует threadPoolExecutor для запуска операций и простого LinkedBlockingQueue для хранения задачи с абсолютным минимумом в 2 потока и максимум вдвое больше числа процессоров (2 * C + 1), потоки называются «AsyncTask #» и не будут убиты после завершения AsyncTask, вместо этого они будут ждать следующей задачи. https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTask.java#L208 – Inverce
Спасибо за информацию. По вашей ссылке есть строка: private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; , 'AsyncTask' * может * использовать threadPoolExecutor, но поведение по умолчанию является серийным. –
@Inverce 'Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать ошибок обычного приложения, вызванных параллельным выполнением. 'Ссылка [здесь] (https://developer.android.com/reference/android/os/AsyncTask.html). – Enzokie
@Override protected void onPreExecute() { holdWait = false; stop = false; }
@Override
protected Void doInBackground(Void... params) {
synchronized (this) {
while(true) {
if(Work) return null;
if(HaveWork) {
//make some
} else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
public void mynotify() {
synchronized (this) {
if(holdWait) {
notify();
holdWait = false;
}
}
}
public void setStopWork() {
synchronized (this) {
stop= false;
if(holdWait) {
notify();
holdWait = false;
}
}
}
}
Я думаю, вы не поняли мой вопрос. Я не буду ссылаться на асинтез и снова запускать его и агарировать. Я просто запускаю asyctask для извлечения данных из базы данных только один раз, когда запускается мое приложение. –
@DayemSiddiqui у меня был обновленный код, пожалуйста, проверьте – user1782565
@DayemSiddiqui может это поможет вам – user1782565
- 1. Как приостановить/задержать Android?
- 2. Что может задержать предварительную задачу VxWorks?
- 3. Как приостановить или возобновить задачу сельдерея?
- 4. приостановить/возобновить задачу
- 5. freertos приостановить задачу
- 6. Как правильно приостановить/задержать приложение Windows Forms
- 7. Как задержать преобразование результата асинхронного метода?
- 8. андроид возвращение асинхронного типа onPostexecute
- 9. Приостановить задачу при создании события
- 10. JQuery: Приостановка или задержать функцию
- 11. Приостановить переход и перезапустить после асинхронного вызова
- 12. Может ли андроид-телефон приостановить запрос на проверку Wi-Fi?
- 13. как приостановить таймер countDown - андроид -
- 14. Может ли приложение задержать или отключить будильник другого приложения?
- 15. Gradle не выполняет мою задачу
- 16. Как приостановить и возобновить задачу, выполняемую асинхронно
- 17. Как создать задачу из уже асинхронного кода?
- 18. Создать общую задачу задачи асинхронного вызова
- 19. андроид намерен сбрасывает мою программу
- 20. Лучший способ установить повторяющийся андроид задачу
- 21. Maven андроид релиз: выполнить задачу с distributionManagement
- 22. Почему gulp уходит, не закончив мою задачу?
- 23. Почему Netty не выполняет мою запланированную задачу?
- 24. Нужно СУШИЛЬНО выполнить мою рейк-задачу
- 25. Как задержать службу ScheduledExecutorService?
- 26. как начать другую задачу после завершения асинхронного вызова
- 27. Как приостановить программу, пока мы не получим результат асинхронного метода?
- 28. Ошибка Джерси при попытке приостановить соединение асинхронного запроса
- 29. Как задержать мою программу при чтении из базы данных C#
- 30. Как приостановить или остановить «CSharpScript»?
При каких обстоятельствах это затягивает или приостанавливает выполнение вашей задачи? – Victory
Я извлекаю данные из базы данных и заполняю список. Я извлекаю данные с помощью задачи async и сохраняю их в arraylist после завершения задачи async. Я вызываю notifyDataSetChanged() в функции onPostExecute() для обновления адаптера listview. В большинстве случаев список загружается нормально, но иногда есть задержка (я вижу пустой экран), и через некоторое время список будет обновляться. –
Как вы уверены, что его ожидалось не просто дольше, чтобы получить из базы данных? Диск io может быть медленным. – Victory