Как я могу вернуть большие строки из Сервиса через AIDL?
Я хочу получить xml в сервисе и вернуть эту xml-строку через AIDL. Сегодня я понял, что вызывающее приложение получает только нулевое значение, когда эта строка очень длинная. Я немного протестировал и обнаружил, что ограничение длины строки составляет около 520000 символов, что составляет около 512*1024=524288. Ява хранит строки внутри себя как UTF-16, и я думаю, но я не уверен, что каждый символ внутренне (по крайней мере) имеет размер в два байта, поэтому этот предел будет равен 1 МБ.
Теперь я хочу знать, задокументирован ли этот предел где-нибудь или у кого-то были проблемы с ним раньше. Кто-нибудь знает, как я могу легко вернуть такие большие строки?
2 ответа
Теперь я хочу знать, задокументирован ли этот предел где-нибудь или у кого-то были проблемы с ним раньше.
AFAIK, это официально не задокументировано, но существует ограничение в ~1 МБ на содержание вызова IPC, независимо от того, как это выполняется (AIDL, широковещательная рассылка). Intent
и т. д.) или что это за данные (строка, растровое изображение, другая форма байтового массива и т. д.).
Кто-нибудь знает, как я могу легко вернуть такие большие строки?
Используйте файл. Если вы хотите, подайте файл через ContentProvider
а также openFile()
, поставляя Uri
к содержанию в ответе AIDL.
Да, это ограничено.
Не отправляйте строку напрямую, лучше всего сохранить ее в SQLite
затем перезвоните туда, где вам нужна строка.