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 ответ

Эта проблема не связана с загрузкой. Это все о том, как работает ваш кеш. Вам просто нужен какой-то кеширующий слой, который будет использоваться при загрузке фотографии для объекта. И когда вы собираетесь загрузить фотографию, вы просто помещаете ее в кеш вручную.

Другие вопросы по тегам