我有这样的任务:需要每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()之后下载图像时,不会更改背景。
我怎样才能更好地实施它?
谢谢大家的回答!
最佳答案
最好下载图像。使用Picasso或Glide
毕加索使用简单
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);
}