Сохранить объект во внутреннюю память при установке приложения

Я хотел бы знать, возможно ли сохранить объект в тот момент, когда пользователь устанавливает приложение на мобильный телефон.

Зачем мне это нужно?

Мое приложение использует некоторые объекты по умолчанию для своего нормального поведения, всякий раз, когда пользователь запускает приложение, я хочу, чтобы объекты использовались. Конечно, я мог бы просто создавать их каждый раз, когда пользователь открывает приложение. Но это может потребовать немного ненужного времени, производительности и батареи. Если это значение по умолчанию, я хочу создать только один раз, и тогда оно всегда будет там.

Я также буду использовать внутреннее хранилище для создания новых объектов этого типа, там будут объекты по умолчанию, которые я описал выше, а также будет возможность создавать новые и сохранять их для использования позже, когда это приложение будет запущен, но это нормально, я уже читал кое-что о том, как сериализовать объект и использовать внутреннюю память для их хранения :)

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

Было очень полезно иметь это пространство больше года, я уже многому научился здесь от вас, спасибо ;)


person TiagoM    schedule 02.04.2013    source источник


Ответы (2)


Android предоставляет следующие намерения для обнаружения установки приложения

     <action android:name="android.intent.action.PACKAGE_ADDED"/>  
     <action android:name="android.intent.action.PACKAGE_REMOVED"/>

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

Что вы можете сделать, так это каждый раз, когда пользователь запускает ваше приложение

  • проверить, существует ли объект
  • если нет, создайте его и запишите во внутреннюю память.

таким образом, он будет создан один раз. В зависимости от типа объекта, который вы пытаетесь сохранить, вы можете использовать SharedPreferences. или SqlLite или просто файл ввода-вывода. Если вы пишете Java Object, да, сериализация — это то, что вам нужно.

Обновить

Если вы планируете получать данные из сети в первый раз, зависит от размера, который вы можете решить,

  • Небольшой файл: поместите его в папку Asset и отправьте с apk.
  • большой файл: если размер файла огромен, вы можете подумать о том, чтобы отправить часть с apk и синхронизировать и обновить остальную часть в фоновом процессе или загрузить все из сети
person minhaz    schedule 02.04.2013
comment
Привет, минхаз, спасибо за ваш ответ, да, это вариант, я тоже думал об этом, но мне все равно нужно проверить, был ли там файл ... это включает создание сокета для входного потока и поиск файла. Я где-то читал, что операции ввода-вывода в Android сильно влияют на производительность, может быть, я слишком строг, но нет ли более элегантного способа справиться с этим? Заранее большое спасибо.. - person TiagoM; 03.04.2013
comment
Спасибо за ваше обновление, это будет небольшой файл, это будут три объекта одного из моих пользовательских классов. Это ответ, который я искал, поместив файл в папку активов? Можете ли вы дать мне больше информации об этом? большое спасибо - person TiagoM; 03.04.2013
comment
Я создаю нужный файл, сериализую его через свою IDE, а затем помещаю в папку с ресурсами? и всегда будет рядом, верно? - person TiagoM; 03.04.2013
comment
Да, это будет частью вашего apk. - person minhaz; 03.04.2013

Я не уверен, что ты имеешь в виду. Объект Java существует в памяти, поэтому «сохранение» его, когда пользователь устанавливает приложение, не имеет особого смысла. Он не может оставаться в памяти, если его не удерживает какой-либо процесс.

Если вы имеете в виду что-то вроде фотографии в формате JPEG или других данных, вы можете поместить данные в каталоги вашего проекта, а затем получить к ним доступ как к ресурсу после установки вашего приложения. См. руководство по API Предоставление ресурсов.

person Joe Malin    schedule 02.04.2013
comment
Добрый день, спасибо за ответ, возможно, я не очень хорошо объяснил. Когда приложение запускается, я хочу, чтобы объекты уже были там, они будут объектами по умолчанию для использования, понимаете? Я мог бы просто создавать их каждый раз, когда приложение запускается, но я искал другой обходной путь... Может быть, создать объект, сериализовать его и сохранить во внутренней памяти в момент установки, и тогда мне не нужно было бы создавать это объект каждый раз. Ты понял? Спасибо ;) - person TiagoM; 03.04.2013