1

Проводящие api-вызовы приложений каждые 10 секунд с местоположением gps от поставщика сети. А также есть несколько вызовов api, которые может выполнять пользователь.сбои приложений для Android при превышении Пул потока 9 и задачи в очереди 128

приложение рушится с использованием права доступа в Интернет или доступа к интернету (доступ к данным устройства) есть ли способ предотвратить сбой приложения и удержать запрос api до тех пор, пока не будет доступна интернет-сеть.

здесь им разместить мой крах reprort StackTrace

java.util.concurrent.RejectedExecutionException: 
Task [email protected] rejected from [email protected][Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 2]  
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011) 
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793) 
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339)  
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:590) 
at com.pickme.driver.service.LocationUpdate$LocationUpdateTask$1.run(LocationUpdate.java:216) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5333)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:515)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:711)  
at dalvik.system.NativeStart.main(Native Method) 
+0

Вы используете kitkat или более низкое устройство для тестирования приложения? Попробуйте андроид 5.0 (леденец) .. –

+0

с использованием kitkat и нижних устройств –

ответ

3

queued tasks = 128 означает, что вы достигли максимального количества задач для AsyncTask:

private static final BlockingQueue sPoolWorkQueue = new LinkedBlockingQueue(128);

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

Вы также можете использовать Executors.newSingleThreadExecutor, который имеет неограниченную очередь, но вам придется делать какие-либо обновления пользовательского интерфейса самостоятельно - например, с помощью обработчиков. Реализация AsyncTask основана на Executors.

+0

спасибо за немедленный ответ. возможно ли, что он будет собирать мои точки местоположения из GPS и сохранять в общих предпочтениях, когда сеть доступна. И проверьте, доступна ли сеть. когда тогда доступная сеть создает один json-объект и вызывает api. пожалуйста, дайте мне за и против моего подхода. –

2

Из того, что я понял об AsyncTask, реализация AsyncTask до того, как kitkat может поставить в очередь только 128 задач. Над которой он выдает RejectedExecutionException. Поэтому я бы предложил вам уменьшить количество созданных AsyncTask.

+0

спасибо за немедленный ответ. возможно ли, что он будет собирать мои точки местоположения из GPS и сохранять в общих предпочтениях, когда сеть доступна. И проверьте, доступна ли сеть. когда тогда доступная сеть создает один json-объект и вызывает api. пожалуйста, дайте мне за и против моего подхода. и, пожалуйста, предоставьте мне надлежащий способ избежать исключения «RejectedExecutionException», –