AsyncTask - 从doInBackground返回和执行onPostExecute(使用PagerAdapter)之间的长时间

时间:2016-02-20 14:35:53

标签: android performance android-asynctask android-viewpager android-pageradapter

我使用AsyncTask从Internet下载图像。我在ViewPager中显示它们。

我使用instantiateItem中的MyPagerAdapter方法调用它:

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撤回到输入onPostExecute之间需要大约2000毫秒。

奇怪的是,当我稍后滑动ViewPager时(在加载第一张图像之后)它正常工作并需要大约0-5毫秒。

你有什么想法可以引起什么?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。问题出现在Fragments中 - 当我用ViewPager开始新活动时,花了很多时间来保存旧片段的包(有许多对象的列表为Serializable)。我注意到通过查看DDMS方法分析。没有我自己的方法,所以我认为它可能是碎片操作的东西。