Android-2.3.3和4.0操作系统中的异步任务行为
我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在android设备2.3.3(WIFI速度512kbps)上运行应用程序并检查DDMS(线程查看器)时,线程数量从25个一直增加到50个。但当我在设备4.0(WIFI速度5 MBPS)上测试相同的应用程序时,线程数并没有增加 有人能帮我理解为什么会这样吗?这是由于android操作系统的差异还是其他原因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之间异步任务的实现是有区别的 当线程完
提前感谢。您是否使用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…是的,异步任务用于执行后台操作。我们可以做什么样的调试日志记录来更好地理解它?当线程完成工作时。如果是异步任务,内部可能会使用固定的线程池。事实是线程在那里并不意味着什么,如果需要,它们将被重用。有没有关于为什么做出这些设计选择的文字?