1
我使用AsyncTask从Internet下载图像。我在ViewPager中显示它们。AsyncTask - 从doInBackground返回并执行onPostExecute(使用PagerAdapter)很长时间
downloader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,imageView, url);
我下载的样子:
protected Bitmap doInBackground(Object... params) {
//(...)
//downloading image using httpConnection and decoding it to bitmap using BitmapFactory
//(...)
Log.d("myApp", "returning");
start = System.currentTimeMillis();
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
long stop = System.currentTimeMillis();
long period = stop-start;
Log.d("myApp-trace","it took: "+period);
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
}
}
的问题是,它从doInBackground returing和进入onPostExecute约〜2000毫秒
我使用MyPagerAdapter
调用它从instantiateItem
方法。
奇怪的是,当我稍后滑动ViewPager时(在加载第一个图像后),它正常工作并需要约0-5毫秒。
你有什么想法可以造成什么?
这些图像有多大?他们被缓存?你是从viewpager调用执行吗? –
我不知道为什么图像的大小或缓存它们很重要。下载它们不是问题,并且工作速度很快(它们大约是200kB jpgs,它们没有被缓存)。我只是在图像下载后输入onPostExecute很长一段时间的问题(它只发生在开始)。 正如我所说,我从MyPagerAdapter中的instantiateItem方法调用execute。 – michalsol
因为你在其他地方阻塞主线程。执行调用后的instantiateItem中的Fx ...主线程上的调用已排队,因此onPostExecute必须等待轮到它... – Selvin