超过线程池 9 和排队任务 128 时,android 应用程序崩溃

标签 android multithreading android-asynctask threadpool threadpoolexecutor

应用程序传导 api 每 10 秒调用一次来自网络提供商的 gps 位置。并且用户还可以执行多个 api 调用。

应用程序因法律互联网或更少的互联网连接而崩溃(设备数据访问) 是否有适当的方法来防止应用程序崩溃并保持 api 请求直到互联网网络可用。

我在这里发布我的崩溃报告堆栈跟踪

java.util.concurrent.RejectedExecutionException: 
Task android.os.AsyncTask$3@4206a5b0 rejected from java.util.concurrent.ThreadPoolExecutor@41e97858[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)

最佳答案

queued tasks = 128 表示您已达到 AsyncTask 的最大任务数:

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

一种方法是在某些数据结构中对您的作业进行排队,例如 bundle 并将其存储在某些数据库(sqlite)中。无论如何它都会有用,因为如果用户将终止您的应用程序,那么现在您的所有任务都将丢失。如果它们保存在 sqlite 中 - 那么您可以在下次应用运行时发送它们。

你也可以使用 Executors.newSingleThreadExecutor ,它具有无限队列,但您必须自己进行任何 UI 更新 - 例如使用处理程序。 AsyncTask-s 实现基于 Executors。

关于超过线程池 9 和排队任务 128 时,android 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395004/

相关文章:

Java线程启动时间

Android - setSoTimeout 不工作

android - 使用 AsyncTask for Android ListView 更新图像缩略图不正确

android - 旋转二维图像onclick android

Android服务启动10秒后被杀死

android - 减少Android中res文件夹的大小(多语言支持)

android -/data/local/tmp 文件夹是否为所有非 root 的 android 设备公开?

iOS:在单独的线程中加载图像时保持用户界面响应

c# - 等待一段时间不阻塞主线程

java - Android 处理具有动态 Activity 的线程