Android: производительность увеличивается при загрузке файла на сервер
Мне нужно загрузить объект на сервер с фотографией в одном из полей. После того, как объект был отправлен, мне нужно отобразить его на карте. Если пользователь вводит объект, он должен видеть загруженную фотографию внутри. Я столкнулся с проблемой плохой производительности при отправке фото - поэтому пользователю нужно долго ждать, пока фото будет передано. Я пошел с 2 способами:
1) Прямой подход. Я пытался пойти с Base64
кодирование, а затем отправить файл через Volley
библиотека. Скорость недопустима - пользователю нужно подождать до 4 секунд, пока файл декодируется в строку и отправляется на сервер.
2) Я пошел с Service
подход. Так создал IntentService
куда загрузил нужный файл:
public class FileUploaderService extends IntentService{
private static final String TAG = "FileUploaderService";
/**
* Creates an IntentService. Invoked by your subclass's constructor.
*
* @param name Used to name the worker thread, important only for debugging.
*/
public FileUploaderService(String name) {
super(name);
}
public FileUploaderService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent!=null){
int id = intent.getIntExtra(Constants.BUNDLE_POST_UPLOAD_ID,0);
if (id!=0){
String url = "...";
File image = new File(String.valueOf(intent.getStringExtra(Constants.BUNDLE_POST_UPLOAD_FILE)));
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
Map<String,String> params = new HashMap<>();
params.put("image", Utils.convertBitmapToString(bitmap));
Utils.sendVolleyRequestWithoutDialog(this, Request.Method.PUT, url, params, new VolleyCallback() {
@Override
public void onSuccess(String stringObject) {
}
@Override
public void onErrorResponse(String error) {
Toast.makeText(FileUploaderService.this, error, Toast.LENGTH_SHORT).show();
}
});
}
}
}
}
Это решает проблему производительности, но вызывает проблему, когда пользователь входит в объект, на некоторое время внутри нет фотографии.
Поэтому мне нужно найти решение, которое позволит легко переносить фотографию.
1 ответ
Эта проблема не связана с загрузкой. Это все о том, как работает ваш кеш. Вам просто нужен какой-то кеширующий слой, который будет использоваться при загрузке фотографии для объекта. И когда вы собираетесь загрузить фотографию, вы просто помещаете ее в кеш вручную.