Как ускорить сохранение .jpg в Android?

Рейтинг: 1Ответов: 1Опубликовано: 21.04.2015

Я разрабатываю приложение (на Android 4.0.3), которое делает серию снимков при нажатии на кнопку и сохраняет их в формате jpg на карту памяти телефона. На данный момент серия из 30 снимков выполняется (делаем их автоматически и сохраняем на карту) за 15-18 сек., использую фронтальную камеру, мне необходимо добиться результата в 2-3 сек. Есть два вопроса:

  1. Это возможно сделать?
  2. Если да, то как и что нужно оптимизировать, код приложил.

Помогите, пожалуйста!

protected Void doInBackground(byte[]... data) {

        try {
            if(!dir.exists()) {
                dir.mkdirs();
            }

            outStream = new FileOutputStream(new File(dir, String.format("%d.jpg", count)));
            outStream.write(data[0]);
            outStream.flush();
            count++;
            if(count==30) {
                outStream.close();
            }
            Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + new File(dir, String.format("%d.jpg", count)).getAbsolutePath());
        }  catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();
        return null;
    }


    protected void onPostExecute(Void result) {
        if(count<30) {
            mCamera.takePicture(null, null, null, mPictureCallback);
        } else {
            m_Time = System.currentTimeMillis() - m_Time;
            mLog.setText("Время: " + Long.toString(m_Time) + "мс");
        }
    }

Ответы

▲ 1

Хорошо было бы завернуть FileOutputStream в BufferedOutputStream:

outStream = new BufferedOutputStream(new FileOutputStream(new File(dir, String.format("%d.jpg", count))));

Тогда запись в файл будет вестись не побайтно, а блоками. Можно будет избавиться и от outStream.flush(), он не так сильно тут нужен, но быстродействие может ухудшить.