理解android中的并行异步任务
在我的应用程序中,我在许多地方使用异步任务,最近我遇到了以下异步任务的doInBackground没有被调用的问题,这是在我第三次执行以下异步任务时发生的(其他异步任务也在运行) 我运行的是Android版本4.4.3理解android中的并行异步任务,android,multithreading,android-asynctask,threadpool,Android,Multithreading,Android Asynctask,Threadpool,在我的应用程序中,我在许多地方使用异步任务,最近我遇到了以下异步任务的doInBackground没有被调用的问题,这是在我第三次执行以下异步任务时发生的(其他异步任务也在运行) 我运行的是Android版本4.4.3 如何找出我的应用程序中当前正在运行的同步任务数?Bcz我想核心池大小计数可能是导致问题的原因 或者,如果发生死锁或任何其他情况并阻止执行新的异步任务,android studio中是否有方法识别并杀死其他可能没有用处的异步任务 如果我将CustomThreadPoolExecut
当您多次运行
AsyncTask
时,它们都在同一线程上的队列中运行,因此直到一个任务没有完成,下一个任务才会启动
因为你永远不会完成任务…下一个任务不会开始
查看一下当您多次运行
AsyncTask
时,它们都在同一线程上的队列中运行,因此直到一个任务没有完成,下一个任务才会开始
因为你永远不会完成任务…下一个任务不会开始
看一看你好,谢谢种马和royB的重播……我找到了导致问题的原因 多个异步任务的条件如下: 在甜甜圈之前(直到1.6版) 甜甜圈和蜂巢后(1.6–3.0) 蜂巢和果冻豆后(版本3.0–4.3.1)
private static final int CORE\u POOL\u SIZE=5;
私有静态最终整数最大池大小=128;
private static final BlockingQueue sPoolWorkQueue=new LinkedBlockingQueue(10);
来自KitKat(上面的4.4):
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
private static final int CPU_COUNT=Runtime.getRuntime().availableProcessors();
私有静态最终整数核心池大小=CPU计数+1;
私有静态最终整数最大池大小=CPU计数*2+1;
private static final BlockingQueue sPoolWorkQueue=new LinkedBlockingQueue(128);
当我在Android版本4.4.3上运行时,我使用了Runtime.getRuntime().availableProcessors();要在我的日志中打印CPU计数,它显示2所以2+1=3是我设备的核心池大小,
从下面的studio调试器控制台中可以看到
同时,我的设备中只能运行3个线程,因为这些线程已经被占用(正在运行)。。当我在doInbackground()方法中使用while循环时,这些异步任务从未完成,所以新的异步任务将进入队列,并且没有得到要执行的线程。
现在,我已经确保异步任务在其工作结束后立即正确终止。在我的修复之后,你可以在下面看到异步任务(线程)可用(处于等待状态)来执行新任务
你好,谢谢种马和royB的重播……我找到了导致问题的原因 多个异步任务的条件如下: 在甜甜圈之前(直到1.6版) 甜甜圈和蜂巢后(1.6–3.0) 蜂巢和果冻豆后(版本3.0–4.3.1)
private static final int CORE\u POOL\u SIZE=5;
私有静态最终整数最大池大小=128;
private static final BlockingQueue sPoolWorkQueue=new LinkedBlockingQueue(10);
来自KitKat(上面的4.4):
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
private static final int CPU_COUNT=Runtime.getRuntime().availableProcessors();
私有静态最终整数核心池大小=CPU计数+1;
私有静态最终整数最大池大小=CPU计数*2+1;
private static final BlockingQueue sPoolWorkQueue=new LinkedBlockingQueue(128);
当我在Android版本4.4.3上运行时,我使用了Runtime.getRuntime().availableProcessors();要在我的日志中打印CPU计数,它显示2所以2+1=3是我设备的核心池大小,
从下面的studio调试器控制台中可以看到
同时,我的设备中只能运行3个线程,因为这些线程已经被占用(正在运行)。。当我在doInbackground()方法中使用while循环时,这些异步任务从未完成,所以新的异步任务将进入队列,并且没有得到要执行的线程。
现在,我已经确保异步任务在其工作结束后立即正确终止。在我的修复之后,你可以在下面看到异步任务(线程)可用(处于等待状态)来执行新任务
和
There was no concept of Multiple AsyncTask.
Here it uses multiple AsyncTask in parallel by default and you cannot customize it.
private static final int CORE_POOL_SIZE = 5;
private static final int MAXIMUM_POOL_SIZE = 128;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(10);
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);