我正在尝试解决此问题,现在我有一个详细信息页面活动(根据从ListView中选择的项目,从数据库加载dinamically)。每个“详细信息”页面可以包含1到5个图像,这些图像是从在线服务器下载的。我遇到的问题是,在下载图片之前,活动才会显示。
基本上,在onCreate完成之前,活动不会显示。我正在使用线程下载图像,因此用户界面不会冻结,我的问题是,我可以在哪里下载并将ImageView设置为下层位图,以便用户在点击列表项后立即看到活动和信息然后在下载后下载并设置图像?。
我尝试将线程放在onResume上,但我认为它也没有帮助。什么是最好的方式?
此致
乔治
答案 0 :(得分:1)
您需要实施AsyncTask。它在后台线程上执行并防止阻塞主线程。您只需创建一个扩展AsyncTask的类,如下所示
编辑 - 是的,即使在下载图片之前,这也会显示您的活动。您只需在onCreate()中调用AsyncTask的execute()方法,查看上面的AsyncTasks页面以获得完整的概述。实现起来非常简单,如果AsyncTask没有完成,只需要知道配置更改。
您可能还想在内存中查看caching位图,以防止它们再次被不必要地下载。
public class DownloadItemDetails extends AsyncTask<String, Void, ArrayList<Bitmap>{
protected ArrayList<Bitmap> doInBackground(String...params){
//Download each Bitmap here, and add them to a list to be displayed later
}
protected void onPostExecute(ArrayList<Bitmap> results){
//This method executes on the main thread, so after your downloads finish
//You can set your imageviews in your Details Page here
}
}
答案 1 :(得分:0)
根据您的好奇心让用户满意,我认为您必须使用Github的Android Universal Image Loader库。该库为您提供异步图像加载,缓存和显示。
你也可以使用Github的ShutterBug - Remote Image Loader。它还可以获取远程图像并缓存它们。它特别适合在列表,网格和地图中显示远程图像。