我知道要在 Android 中保持响应式界面,必须在独立线程中完成繁重的工作。我很清楚如何实现这一点(通过使用 AsynTask ...等),这不是问题的重点,只是为了让每个人都知道。
但是我一直在努力使用一个非常简单的并行程序。该程序搜索数组中长度为 15000000 的最小整数。
我实现了这个可运行的:
...
run(){
highestInteger = integers[firstIndex];
for(int i = firstIndex; i < secondIndex; i++){
if(highestInteger<integers[i]){
highestInteger = integers[i];
}
}
}
...所以我可以在数组的前半部分(在一个线程中)中查找最高整数,并在数组的另一半中(在第二个线程中)查找最高整数。
该程序在我的计算机上运行良好(作为 java/not-android 程序),我的意思是并行时间比串行时间短(几乎一半)。
但是在我的 android 平板电脑(4 核)上,时间通常是相同的,而串行的几乎总是更短。
我确实注意到(使用调试器)在我的平板电脑中有几个线程正在运行:
- 主/ui线程(剩下3个核心)
- Binder 1 线程(剩余 2 个核心)
- Binder 2 线程(剩下 1 个核心:()
- Binder 3 线程(有时我在调试器中看到它,有时我没有)。
所以有 3 个线程正在运行,我需要至少 2 个空闲内核才能让我的程序高效运行。我读过一些关于活页夹线程的文章,但我不太了解。
有没有办法解决这个问题?有没有办法可以避免自动创建这些活页夹线程?或者在我们拥有 6 核设备之前不可能让这种线程工作?