我有这样的任务:需要每15分钟从互联网下载图像并将其设置为视图的背景(用户设置周期)。
我做了这样的事情:

我有JobService,它下载图像并将其保存为文件到创建的目录。发送广播后,接收者接受它并将文件名设置为它的侦听器。侦听器-我的类LauncherApplication扩展了Application,它是在所有 Activity 之前创建的,我保存了它的实例,因此可以从程序每个部分的文件中加载图像。

public class BackgroundImageAsyncChanger extends AsyncTask<String, Void ,Drawable> {

    private int pictureNumber;
    private View backgroundView;
    private Context context;

    public BackgroundImageAsyncChanger(View backgroundView, Context context, int pictureNumber) {
        this.backgroundView = backgroundView;
        this.context = context;
        this.pictureNumber = pictureNumber;
    }

    @Override
    protected Drawable doInBackground(String ... imageFilesNames) {
        final int index = pictureNumber;
        final Bitmap bitmap = ImageFileOperator.getInstance().loadImage(context, imageFilesNames[index]);
        final Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
        return drawable;
    }

    @Override
    protected void onPostExecute(Drawable backgroundImage) {
        backgroundView.setBackground(backgroundImage);
    }
}

因此存在问题。从Internet下载图像需要花费时间,并且在Activity / Fragment OnResume()之后下载图像时,不会更改背景。
我怎样才能更好地实施它?

谢谢大家的回答!

最佳答案

最好下载图像。使用PicassoGlide

毕加索使用简单

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

滑行
Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

在这两种情况下,您都不必担心下载图片。加载后,它会自动投射到图片视图中。并自动进行缓存管理。

/ ***************************************************** ******** /

因为每隔15分钟,您的工作计划程序就会从服务器或其他任何途径获取url,因此假设您有一个函数调用
    private void jobScheduler(){
    new url generates here
    call the function to load image and send the url as paramater
         loadImages(url);
      }

在这里,您在每次 15分钟之后一次又一次地将网址加载到相同的pitcure中
 private void loadImages(String url){
    Picasso.with(context)
        .load(url)
        .placeholder(R.drawable.user_placeholder)
        .error(R.drawable.user_placeholder_error)
        .into(imageView);
    }

10-08 11:01