如何防止MaterialDialog冻结

时间:2015-07-09 16:35:39

标签: android bitmap download material android-glide

我正在尝试使用Glide下载图片,并将其设置为壁纸,在下载时,它会显示使用MaterialDialogs库的对话框,但不知何故,当图片几乎被加载时,对话框会冻结一秒钟。这是我的代码:

final MaterialDialog downloadDialogA = new MaterialDialog.Builder(context)
                                .content(R.string.downloading_wallpaper)
                                .progress(true, 0)
                                .cancelable(false)
                                .show();

                        Glide.with(context)
                                .load(wallurl)
                                .asBitmap()
                                .into(new SimpleTarget<Bitmap>() {
                                    @Override
                                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                                        downloadDialogA.setContent(context.getString(R.string.setting_wall_title));
                                        if (resource != null) {
                                            WallpaperManager wm = WallpaperManager.getInstance(context);
                                            try {
                                                wm.setBitmap(resource);
                                                Toast.makeText(context, R.string.set_as_wall_done, Toast.LENGTH_LONG).show();
                                                Log.v("Wall", "It worked!");
                                            } catch (IOException e2) {
                                                Toast.makeText(context, e2.getLocalizedMessage(), Toast.LENGTH_LONG).show();
                                                Log.v("Wall", "Error " + e2.getMessage());
                                            }
                                        }
                                        downloadDialogA.dismiss();
                                    }
                                });

请注意,我不想使用其他库来下载图片。它工作正常。我只是想阻止对话冻结。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这就是我做到的。

我创建了一个新的AsyncTask代码是:

Glide.with(context)
        .load(wallurl)
        .asBitmap()
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(final Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                if (resource != null) {
                    downloadDialogA.setContent(context.getString(R.string.setting_wall_title));
                    new ApplyWallpaper(context, downloadDialogA, resource).execute();
                }
            }
        });

然后,当资源准备就绪时(使用Glide提供的回调方法),我执行了AsyncTask,如下所示:

href

完美无瑕地工作。

感谢Javier Santos提供了指导。