- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 ImageLoader.loadImage
下载多个图像,这将启动多个线程。因为它们需要一段时间才能执行,而且我不想锁定 UI,所以我想在 AsyncTask 的 doInBackground()
函数中运行它们。
但是我无法在 doInBackground()
函数中启动新线程。有没有解决的办法?
最佳答案
我同意323go的评论
AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用的线程框架。 AsyncTasks 理想情况下应该用于短操作(最多几秒)。 如果您需要保持线程长时间运行,强烈建议您使用 java 提供的各种 API .util.concurrent 包,例如 Executor、ThreadPoolExecutor 和 FutureTask。(直接来自文档)
作为替代方案,您可以使用 https://github.com/octo-online/robospice 。您可以提出多个香料请求。
通用图像加载器
要下载并显示大量图像,请使用 ListView 或 GridView 。为此,您可以使用通用图像加载器或惰性列表。通用图像加载器按照惰性列表的示例原理工作。
我必须显示 picasa 相册公共(public)文件夹中的图像(大约 300 - 500 张)。我发出了一个http请求,响应是json。我使用 asynctask 来发布 http 请求,获取响应,解析 json 以获取 url。一旦我得到了 url,我就使用通用图像加载器来加载图像。因此,您可以使用 asynctask 进行短期运行操作。
假设您可以在列表中一次查看 3 个图像。下载三个图像,如果没有则缓存并显示。当您滚动时,该过程会重复。一旦缓存的图像不需要再次下载。在这种情况下,UI 不会被阻止。您可以随时向下滚动。
Url 被视为键。图像缓存到 SD 卡或手机内存中。可以指定缓存的位置。如果图像存在于缓存中。显示缓存中的图片,如果不下载,则缓存并显示图片。
两者都使用缓存。通用图像加载器有很多配置选项。 https://github.com/nostra13/Android-Universal-Image-Loader
查看链接中的功能。
在您的自定义适配器构造函数中
File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");
// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
// You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.enableLogging()
.build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();
在你的 getView() 中
ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options
您可以配置其他选项来满足您的需求。
您应该使用 window 以实现平滑滚动和性能。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html
关于java - 如何从 doinbackground() 执行其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749454/
我是一名优秀的程序员,十分优秀!