これは完璧な方法ではありませんが、それでも機能します。
ユーザが スクロールして新しい投稿を読み込むと、バックグラウンドで画像を読み込み/キャッシュするインテントサービスを作成すると、サーバに の代わりにキャッシュから取得されます。
ImageCahce.java
public class ImageCache extends IntentService {
Context mContext;
public ImageCache() {
super("ImageCache");
}
@Override
public void onCreate() {
super.onCreate();
mContext = this;
Log.d("ImageCache", "Service Started");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null)
if (intent.getStringExtra(Constants.IncomingClass) != null)
if (intent.getStringExtra(Constants.IncomingClass).equalsIgnoreCase("Trending")) {
ArrayList<Trending> items = intent.getExtras().getParcelableArrayList(Constants.CacheKey);
StartCachingImages(items);
}
return START_NOT_STICKY;
}
//Trending logic
private void StartCachingImages(final ArrayList<Trending> items) {
if (items != null) {
if (!items.isEmpty()) {
for (int i = 0; i < items.size(); i++) {
Post pogo = items.get(i).postObj;
String imagePath = "";
if (pogo.type.equalsIgnoreCase("Picture")) {
imagePath = pogo.picture;
} else if (pogo.type.equalsIgnoreCase("Video")) {
imagePath = pogo.thumbnail;
} else if (pogo.type.equalsIgnoreCase("Multimedia")) {
// imagePath = pogo.thumbnail;
if (pogo.picture.length() > 0) imagePath = pogo.picture;
else imagePath = pogo.thumbnail;
}
//Log.d("ImageCache", "index " + i + " started");
BackgroundCaching backgroundCaching = new BackgroundCaching(i, imagePath, items.get(i).userObj.picture);
backgroundCaching.execute();
}
//Log.d("ImageCache", "Self stopping");
ImageCache.this.stopSelf();
}
}
}
class BackgroundCaching extends AsyncTask<String, Void, String> {
String path, thumbnail;
int id;
public BackgroundCaching(int id, String path, String thumbnail) {
this.id = id;
this.path = path;
this.thumbnail = thumbnail;
}
@Override
protected String doInBackground(String... params) {
try {
FutureTarget<File> future = Glide.with(mContext).load(path)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
future.get();
//Log.d("ImageCache", "Loaded actual " + id);
} catch (Exception e) {
//Log.d("ImageCache", "Failed to load ->" + path);
}
try {
FutureTarget<File> future = Glide.with(mContext).load(thumbnail)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
future.get();
//Log.d("ImageCache", "Loaded thumbnail " + id);
} catch (Exception e) {
//Log.d("ImageCache", "Failed to load ->" + thumbnail);
}
return "Executed";
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("ImageCache", "Service Stopped");
}
}
サービスを開始するStartImageCacheService()
を使用しています。私は
を持って
優れたユーザー体験を提供するには、このための任意の解決策を得るのですか? – Rose