Как я могу вернуть большие строки из Сервиса через AIDL?

Я хочу получить xml в сервисе и вернуть эту xml-строку через AIDL. Сегодня я понял, что вызывающее приложение получает только нулевое значение, когда эта строка очень длинная. Я немного протестировал и обнаружил, что ограничение длины строки составляет около 520000 символов, что составляет около 512*1024=524288. Ява хранит строки внутри себя как UTF-16, и я думаю, но я не уверен, что каждый символ внутренне (по крайней мере) имеет размер в два байта, поэтому этот предел будет равен 1 МБ.

Теперь я хочу знать, задокументирован ли этот предел где-нибудь или у кого-то были проблемы с ним раньше. Кто-нибудь знает, как я могу легко вернуть такие большие строки?

2 ответа

Решение

Теперь я хочу знать, задокументирован ли этот предел где-нибудь или у кого-то были проблемы с ним раньше.

AFAIK, это официально не задокументировано, но существует ограничение в ~1 МБ на содержание вызова IPC, независимо от того, как это выполняется (AIDL, широковещательная рассылка). Intentи т. д.) или что это за данные (строка, растровое изображение, другая форма байтового массива и т. д.).

Кто-нибудь знает, как я могу легко вернуть такие большие строки?

Используйте файл. Если вы хотите, подайте файл через ContentProvider а также openFile(), поставляя Uri к содержанию в ответе AIDL.

Да, это ограничено.

Не отправляйте строку напрямую, лучше всего сохранить ее в SQLite затем перезвоните туда, где вам нужна строка.

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