MediaScannerConnection создает android.app.ServiceConnectionLeaked

Поведение по умолчанию с Джерси, когда есть статус ошибки (4xx, 5xx), заключается в использовании сервлета Response.sendError, что приводит к переадресации на страницу с ошибкой. Поскольку нет страницы с ошибкой, это приводит к 404.

Мы можем изменить это поведение, установив свойство Jersey

ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR

blockquote>

Вы можете сделать это в своем подклассе ResourceConfig

public JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, true);
    }
}

Или (с помощью Spring Boot) вы можете добавить его в свой application.properties файл.

spring.jersey.init.jersey.config.server.response.setStatusOverSendError=true

29
задан David Shellabarger 21 April 2011 в 03:22
поделиться

3 ответа

Я заметил то же самое сообщение об ошибке, используя фрагмент кода, предоставленный с документацией Environment.getExternalStoragePublicDirectory .

Код работает нормально, как и ожидалось, и делает новый файл видимым в галерее устройства , но в то же время печатает ошибку о leaked ServiceConnection.

Глядя на внутренний код Android в MediaScannerConnection, кажется, что существует какой-то механизм для остановки службы после последнего файла. Может быть, это не работает, когда дается только один файл?

Я решил использовать совершенно другое решение, сообщив MediaScanner через Intent. Это тоже хорошо работает и не выдает никаких предупреждений:

Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri fileContentUri = Uri.fromFile(permFile); // With 'permFile' being the File object
mediaScannerIntent.setData(fileContentUri);
this.sendBroadcast(mediaScannerIntent); // With 'this' being the context, e.g. the activity

Кажется, что это предпочтительный способ, поскольку он также упоминается в Android-обучении о съемке фотографий .

29
ответ дан sunadorer 21 April 2011 в 03:22
поделиться

У меня была эта проблема с распознавателем голоса, когда я менял раскладки и т. Д. Все, что мне нужно было сделать, это добавить unregisterReceiver, что-то вроде этого в onActivityResult:

@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        unregisterReceiver(mReceiver);
        super.onDestroy();
    }     

Надеюсь, это поможет!

0
ответ дан Droidster 21 April 2011 в 03:22
поделиться

Используйте вместо этого getApplicationContext().

11
ответ дан Pepijn 21 April 2011 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: