Совместное использование данных Android (состояние, значение, конфигурация) между несколькими приложениями и действиями - PullRequest
0 голосов
/ 20 февраля 2011

Привет Мы разрабатываем сложное приложение, которое включает в себя несколько экранов.Мы решили сохранить общие действия в отдельном приложении apk (commonScreen apk), чтобы их могли использовать мы сами, а также другие, использующие намерения.

Теперь нам нужен общий способ хранения и совместного использованияданные между действиями, присутствующими в нашем главном приложении, и commonScreen apk.

Мы думали о сохранении данных в объекте Application (расширение Application), но когда мы вызываем startActivityForResult (commonScreenApkIntent), onActivityResult, мы видим, что данные присутствуютв приложении больше нет (ноль), см. Не храните глобальные данные в приложении , чтобы узнать о проблемах, связанных с ними.

Является ли хранение и извлечение данных в каждом действии с использованием предпочтений хорошим методом для больших данных?

Обратите внимание: объем данных, которые мы хотим сохранить, больше, что в основномсостояние кнопок приложения (отключено / включено), значение и конфигурации.Может достигать 1000 значений.

Не могли бы вы предложить способ обмена данными?

Ответы [ 3 ]

3 голосов
/ 20 февраля 2011

Рассматривали ли вы использование SQLite ?, ContentProviders может сделать вашу жизнь проще

1 голос
/ 21 февраля 2011

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

Если вы думаете об использовании MODE_WORLD_READABLE, остановитесь и пересмотрите.Во-первых, не то, что это позволяет любому приложению , установленному на устройстве, читать эти данные.Это также обычно указывает на проблему дизайна с плохой зависимостью между приложениями, которая вас кусает.

0 голосов
/ 17 февраля 2013

Я согласен с тем, что сказал хакбод.
(Дамодхарэн просто продвигает свой сайт.)

Ваш вопрос «Хранение и извлечение данных в каждом действии с использованием предпочтений - хороший метод, когда большие данныевовлечен? »
Мой ответ = Нет. Предпочтение следует использовать для небольших примитивных данных (т. е. = Оценка, которую каждый ученик имеет в вашем классе).
SharedPreferences сохраняет результат в файле XML, расположенном в приложении.Если вы хотите найти XML 1) Запустите ваше приложение.2) Перейдите в DDMS. 3) С помощью «Проводника» перейдите в каталог «Данные» -> «Данные» -> имя вашего пакета (com.example.whothing) -> shared_prefs.Там вы должны увидеть документ XML.

Параметры хранения http://developer.android.com/guide/topics/data/data-storage.html:
Общие настройки = Хранить личные примитивные данные в парах ключ-значение.
Внутреннее хранилище = Хранить личные данные в памяти устройства.
Внешнее хранилище = Публично хранитьданные в общем внешнем хранилище.
Базы данных SQLite = Хранить структурированные данные в частной базе данных.
Сетевое подключение = Хранить данные в Интернете с вашим собственным сетевым сервером.

Я предлагаю вам хранить ваши данныев использовании SQLite.Таким образом, вы можете использовать огромный центр обработки данных Google.Если у вас есть собственный сервер, используйте сетевое соединение.Внешнее хранилище будет моим третьим предложением, потому что внешняя память (SD-карты), как правило, имеет гораздо больше места, чем внутренняя память (Внутренняя память = Внутренняя память или Общие настройки), особенно на недорогих телефонах.Например, у меня Samsung Gio.Внутренняя память составляет 181 МБ.SD-карта вмещает почти 2 ГБ.БОЛЬШАЯ Разница!

Если вы делаете все это, потому что у вас «несколько экранов», вы должны смотреть на фрагменты.Фрагменты - это то, что позволяет вам управлять одним приложением на нескольких экранах (например, на телефоне и планшете).

Звучит так, будто у тебя все это задом наперед.Общая деятельность должна иметь возможность контролировать то, что называются Интентами, а не наоборот.У вас должна быть общая активность, которая контролирует, какие фрагменты отображаются в зависимости от устройства.Затем внутри каждого отдельного объекта фрагмента вы можете использовать SQLite для извлечения сохраненных состояний.

...