Приветствую Вас, Гость
Главная » 2011 » Октябрь » 11 » О выгрузке приложений в Андроид
23:29
О выгрузке приложений в Андроид


Так Андроид управляет работой приложения

Вот краткая версия статьи для тех, кто не любит много читать или не понимает технических терминов:

  • B систему Андроид встроено автоматическое удаление задач при нехватке памяти.
  • В систему Андроид встроено автоматическое удаление задач, закончивших свое выполнение.
  • В систему Андроид встроено автоматическое удаление задач, к которым долгое время не обращались.
  • Большинство сервисов (возможно выполняющихся в фоне) используют крайне мало памяти в том случае, если они не выполняют какую-то трудоемкую задачу.
  • Поставщик содержимого (СontentProvider) интенсивно работает только когда получает сообщение о необходимости предоставления своего содержимого. Во все остальное время он использует очень мало памяти.
  • Унитожение процесса, не готового к этому, приводит только к тому, что он должен снова подгрузиться и начать все с самого начала, когда вновь понадобится.
  • Из-за того, что задача скорее всего выполняется в фоне не без причины, ее уничтожение приветдет лишь к ее перезапуску, когда активность, использующая ее вновь к ней обратится. И ей не останется ничего кроме как начать все с начала.
  • Уничтожение определенных процессов может иметь нежелательные побочные эффекты. Неполученные смски, непрозвонившие будильники и вылетающие программы — только небольшая их часть.
  • Единственный верный способ запретить чему-то выполняться на вашем телефоне — деинсталлировать .apk.
  • Большинство приложений сами завершают работу если вы покидаете их нажимая кнопку "назад” (back) до тех пор, пока они не закроются, а не кнопку "домой” (home). Но даже если вы нажимаете "домой”, Андроид все равно в конце концов выгрузит приложение, если оно довольно долго будет находиться в фоне.
Вопросы? Сомнения? Тогда поговорим подробнее.

По умолчанию каждое приложение выполняется в своем отдельном Linux процессе. Android запускает процесс, когда надо выполнить любой код приложения и завершает процесс, когда он больше не нужен и системные ресурсы требуются другим приложениям.

Поставщик содержимого (СontentProvider) активен только во время ответа на запрос от ContentResolver. Подписчики широковещательных сообщений (Broadcast receivers) активны только во время ответа на широковещательное сообщение. Таким образом, нет никакой необходимости принудительно завершать эти компоненты.

Активности (Activities), с другой стороны, представляют собой пользовательский интерфейс. Они являются долгосрочными сеансами общения с пользователем и могут сохранять активность даже в ждущем режиме пока взаимодействие продолжается.

Также и сервисы могут продолжать работать длительное время. Поэтому в системе Android есть встроенные методы завершения активностей и сервисов:
  • Активность (Activity) можно завершить, вызвав ее метод finish(). Одна активность (Activity) может завершить другую (порожденную первой с помощью метода startActivityForResult()), вызвав метод finishActivity() последней.
  • Сервис можно остановить, вызвав его метод stopSelf() или вызвав Context.stopService().
Компоненты также могут быть завершены системой, когда они больше не используются или когда системе Android требуется память для более активных компонент.

Если приложение долгое время не используется, система завершает все его активности (Activities) кроме главной (root). Когда пользователь возвращается к приложению все так же как и было, но присутствует только главная активность (Activity). Идея в том, что если пользователь когда-то оставил приложение, то через некоторое время он вернется чтобы выполнить какую-то новую задачу по сравнению с той, что он выполнял до этого.

Жизненный цикл активности (Activity)

Активность (Activity) может по сути находиться в трех состояниях:
  • Активном или выполняемом — когда находится на экране на первом плане (наверху стека активностей текущего приложения). Именно в этой активности пользователь выполняет свои действия.
  • В приостановленном состоянии (paused), если с нее ушел фокус, но она до сих пор видна пользователю. Это происходит в том случае, когда сверху находится другая активность, которая либо прозрачна, либо занимает не весь экран, так что приостановленная активность из-под нее частично видна. Приостановленная активность — полностью действующая (содержит всю информацию о своем состоянии и содержащихся элементах и связана с менеджером окон (window manager), но может быть убита системой в ситуации жесткой нехватки памяти.
  • В остановленном состоянии (stopped), если она полностью закрыта другой активностью. В ней все еще хранится информация о состоянии и содержащихся элементах. Но она больше не видна пользователю и чаще всего будет уничтожена системой, когда память будет нужна еще где-то.
Если активность приостановлена или остановлена, система может выгрузить ее из памяти либо попросив ее завершиться (вызвав ее метод finish()), либо просто убив сам процесс. Когда надо будет ее снова показывать пользователю, ее придется перезапустить и полностью восстановить предыдущее состояние.

Активности отдается приоритет
в промежуток времени между вызовом метода onResume() и соответствующим вызовом метода onPause(). В это время активность находится выше всех других на дисплее и именно с ней взаимодействует пользователь. Активность может часто переходить между возобновленным и приостановленным состояниями — например, метод onPause() вызывается когда девайс переходит в ждущий режим или когда стартует новая активность, метод onResume() вызывается когда приходит результат активности или новый Intent. По этой причине в эти два метода не стоит помещать действия, которые могут занять много времени.

Категория: Софт | Просмотров: 6062 | Добавил: PutciAm | Теги: таск-киллер, память, андроид | Рейтинг: 0.0/0

Похожие материалы:

Еще новости Веселое Видео
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]