Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-2.3.3和4.0操作系统中的异步任务行为_Android_Multithreading_Threadpool - Fatal编程技术网

Android-2.3.3和4.0操作系统中的异步任务行为

Android-2.3.3和4.0操作系统中的异步任务行为,android,multithreading,threadpool,Android,Multithreading,Threadpool,我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在android设备2.3.3(WIFI速度512kbps)上运行应用程序并检查DDMS(线程查看器)时,线程数量从25个一直增加到50个。但当我在设备4.0(WIFI速度5 MBPS)上测试相同的应用程序时,线程数并没有增加 有人能帮我理解为什么会这样吗?这是由于android操作系统的差异还是其他原因 提前感谢。您是否使用AsyncTask执行后台操作?我认为GB和ICS之间异步任务的实现是有区别的 当线程完

我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在android设备2.3.3(WIFI速度512kbps)上运行应用程序并检查DDMS(线程查看器)时,线程数量从25个一直增加到50个。但当我在设备4.0(WIFI速度5 MBPS)上测试相同的应用程序时,线程数并没有增加

有人能帮我理解为什么会这样吗?这是由于android操作系统的差异还是其他原因


提前感谢。

您是否使用AsyncTask执行后台操作?我认为GB和ICS之间异步任务的实现是有区别的


当线程完成其工作时,尝试添加一些调试日志记录,并查看两个版本之间是否存在差异。

是否使用
AsyncTask
。Android 3.0之后,
AsyncTask
的默认行为是使用串行执行器在单个线程中执行

如果要在任何系统版本上同时运行
AsyncTask
,可以使用此代码

AsyncTask task = new YourTask();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
    task.execute(params);
} else {
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
AsyncTask task=newyourtask();

如果(Build.VERSION.SDK_INT可以使用AsyncTaskCompat.executeInParallel for API<11,则可以在appcompat v4库中找到此类

使用示例:

AsyncTaskCompat.executeParallel(new AsyncTask<Void, Void, Bitmap>() {
        @Override
        protected Bitmap doInBackground(Void... params) {
            return MediaStore.Images.Thumbnails.getThumbnail(
                    imageView.getContext().getContentResolver(),
                    id,
                    MediaStore.Images.Thumbnails.MINI_KIND,
                    null);
        }
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            imageView.setImageBitmap(bitmap);
            if (bitmap != null) {
                // Add the image to the memory cache first
                CACHE.put(id, bitmap);
                if (listener != null) {
                    listener.onImageLoaded(bitmap);
                }
            }
        }
    });
AsyncTaskCompat.executeParallel(新的AsyncTask(){
@凌驾
受保护位图doInBackground(无效…参数){
返回MediaStore.Images.Thumbnails.getThumbnail(
imageView.getContext().getContentResolver(),
身份证件
MediaStore.Images.Thumbnails.MINI_KIND,
无效);
}
@凌驾
受保护的void onPostExecute(位图){
设置图像位图(位图);
if(位图!=null){
//首先将映像添加到内存缓存
CACHE.put(id,位图);
if(侦听器!=null){
onImageLoaded(位图);
}
}
}
});

享受

请发布相关代码!我只有apk文件。我没有代码。谢谢dnkoutso…是的,异步任务用于执行后台操作。我们可以做什么样的调试日志记录来更好地理解它?当线程完成工作时。如果是异步任务,内部可能会使用固定的线程池。事实是线程在那里并不意味着什么,如果需要,它们将被重用。有没有关于为什么做出这些设计选择的文字?