小编Gab*_*iel的帖子

为什么Picasso在后台线程中运行阻止onActivityResult?

我们正在为应用中的照片创建共享模式,其中一个共享选项是在线加载图像的叠加层.如果用户在叠加完成加载之前共享照片,我们将使用未修改的图像发送意图以使用startActivityForResult与其他应用共享,然后在onActivityResult中,我们将用户从共享视图返回到普通照片视图.

我们遇到的问题是,当用户从共享照片返回时,在加载覆盖的后台线程完成之前,不会调用onActivityResult.是否有原因导致后台线程突然开始阻止UI线程?

以下是我们在overlay视图类中使用的代码,它扩展了ImageView来管理它:

private void asyncLoadImage() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            loadImage();
        }
    }).start();
}

private void loadImage() {
    try {
        overlayBitmap = Picasso.with(getContext()).load(url).get();
        if (overlayBitmap != null) {
            displayBitmap();
        } else {
            displayError();
        }

    } catch (IOException ignored) {
        displayError();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们已经尝试过使用Picasso目标,而不是创建我们自己的线程,我们遇到了完全相同的问题,到目前为止唯一的解决方案是异步使用Ion(但是,在我们之前使用Ion同步或尝试取消Ion请求期货调用startActivityForResult导致相同的UI线程阻塞问题).这感觉就像一个巨大的黑客,因为我们在应用程序中的其他地方使用毕加索.

这些后台任务在返回活动时是否会阻止UI线程?

multithreading android picasso

2
推荐指数
1
解决办法
3154
查看次数

标签 统计

android ×1

multithreading ×1

picasso ×1