首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Picasso加载图像

使用Picasso加载图像
EN

Stack Overflow用户
提问于 2016-09-02 23:22:49
回答 2查看 870关注 0票数 1

我正在使用PicassoURL加载一个Image,在我运行应用程序后,我发现“应用程序可能在其主线程上做了太多的工作”。为了设置Image,我编写了一些类似这样的代码:

代码语言:javascript
运行
复制
Picasso.with(ScrollingActivity.this).load(photoUrl).networkPolicy(NetworkPolicy.OFFLINE).into(userProfileImageView, new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                with(ScrollingActivity.this).load(photoUrl).into(userProfileImageView);
            }
        });

现在,我在考虑使用AsyncTaskImage设置为ImageView,为此,我将代码修改为如下所示:

但是现在我不知道用doInBackground方法和onPostExecute方法写什么。

我使用AsyncTask方法,如下所示:

代码语言:javascript
运行
复制
class SetImageTask extends AsyncTask<Void, Void, Void>
        {

            @Override
            protected Void doInBackground(Void... voids) {

                Picasso.with(ScrollingActivity.this).load(photoUrl).networkPolicy(NetworkPolicy.OFFLINE).into(userProfileImageView, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {
                        with(ScrollingActivity.this).load(photoUrl).into(userProfileImageView);
                    }
                });


                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
            }
        }

但问题是,我在doInBackground方法中将图像设置为ImageView。所以我认为这需要在UI线程中完成。您能告诉我如何使用AsyncTask设置Image

EN

回答 2

Stack Overflow用户

发布于 2016-09-12 18:09:48

您不需要使用AsyncTask或后台线程来使用Piccaso加载图像。毕加索已经进行了优化。它有自己的异步调用。你所遇到的问题

“应用程序可能在其主线程上做了太多工作”

不是由于毕加索的作品。您可以参考this链接查看"Application may be doing too much work on its main thread"背后的原因

票数 2
EN

Stack Overflow用户

发布于 2016-09-02 23:39:03

使用Target,你就不需要AsyncTask了,因为它会在后台解码。

代码语言:javascript
运行
复制
private Target target = new Target() {
    @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
         //do whatever you need in here      
      }

    @Override
      public void onBitmapFailed() {
      }
}

private void loadBitmap() {
   Picasso.with(this).load("url").into(target);
}

确保将Target绑定到视图,否则可能会在该过程完成之前对其进行垃圾回收。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39295874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档