Организация многозадачности в Android

Главная Про Android и iOS (iPhone, iPad) Андроид Организация многозадачности в Android
1 ответ(ов) в теме
Tyr0I{
не в сети давно
На сайте с 09.03.2014
Участник
0
11:56

Приложения в ОС Android с оперативной памятью работают несколько иначе чем в Windows. Основное отличие заключается в том, что в ОС Android вы не занимаетесь распределением оперативной памяти, этим занимается ОС, то есть вам не обязательно закрывать приложения самим, если вы переключили приложение, система может автоматически закрыть предыдущее при некоторых условиях.

Простым языком
Мы не будем в точности описывать все компоненты приложений и их состояния, остановимся на упрощённой схеме, чтобы было легче понять. В ОС Android как и в любой другой операционной системе есть приложения и службы. Приложения не обязательно имеют пользовательский интерфейс и совсем не обязательно вы их можете открыть, но они всё же есть и могут загружаться в память. Службы сделаны для работы в фоне, чтобы не потреблять много ресурсов и электроэнергии. К примеру, клиенту обмена мгновенными сообщениями не обязательно постоянно держать в памяти пользовательский интерфейс программы (окно, кнопки и прочее), поэтому для облегчения работы системы в памяти постоянно висит только служба, которая время от времени нагружает процессор и занимает в оперативной памяти значительно меньше места, а вот пользовательский интерфейс может быть выгружен из памяти. Теперь разберёмся с возможными состояниями приложений. Разделим приложения на три состояния по возможности выгрузки из памяти:
1) Первая группа приложений не выгружается из оперативной памяти никогда и ни при каких обстоятельствах, даже если у вас есть рут права и всевозможные программы. К данному типу приложений относятся небольшое количество системных приложений.
2) Вторая группа приложений приложения, которые могут выгружаться только пользователем, то есть автоматически система их не выгрузит, даже если закончится оперативная память
3) Третья группа приложений, приложения, которые могут выгружаться и пользователем и системой автоматически в случае надобности

Проблемы возникают, а проблемы возникают и с самыми современными устройствами с максимальным объёмом ОЗУ и с самой последней версией ОС Android. Так вот, проблемы с распределением памяти возникают из-за второй группы приложений. Так как существует много приложений у которых стоит слишком большой приоритет, и система не может их выгрузить, когда закончилась оперативная память, система начинает тормозить. Да система автоматизация управления памятью не универсальна, вмешательство пользователя требуется, зато система никогда не закроет нужное приложение, было бы глупо закрывать браузер и навигатор, которыми вы пользуетесь в данный момент. Поэтому закрывать приложения вручную необходимо в любом случае. Закрывать можно либо через сторонние диспетчеры задач - этот способ предпочтительнее, либо через встроенные меню последних запущенных приложений, но этот способ закрывает далеко не все приложения. Естественно, автоматическое закрытие приложений сторонними методами неприемлемо, так как ведёт к тормозам, излишнему потреблению энергии и непредвиденному поведению. Обратите внимание, что некоторые незакрытые приложения могут очень быстро разряжать устройство. Также не стоит постоянно при включении экрана и использовании устройства чистить всю память, память нужно чистить по необходимости. Очень полезно раз в 2-7 дней перезагружать устройство.

В последней версиях ОС Android появилась поддержка действия «последние приложения» (recent apps), при помощи которой можно открывать или закрывать открытые ранее приложения. До этого открыть ранее открытое приложение можно было только нажав по ярлыку приложения. Нажатие кнопки назад в большинстве случаев закрывает приложение в отличие от кнопки домой, которое сворачивает приложение. Кнопка «последние приложение» показывает именно последние запущенные приложения, а не запущенные приложения и тем более уж не все приложения, которые висят в памяти.

Технически

Приложения для Android состоят из нескольких компонентов. Выделяют четыре типа компонентов: Activities, Services, Broadcast receivers и Content providers.
Activities представляют собой графический пользовательский интерфейс для определенной задачи. К примеру, приложение для SMS может иметь одно activity для вывода списка контактов, одно для создания сообщения и т.д. Activity может находиться в одном из трех состояний:

Active или running – в этом состоянии он находится на переднем плане и взаимодействует с пользователем;
Paused – находится на втором плане, но виден пользователю, например, частично перекрыт новым activity;
Stopped – полностью перекрыт другим activity. Но он по-прежнему сохраняет своё состояние, хотя и полностью скрыт от пользователя.

В состояниях Paused и Stopped – activity может быть выгружен из памяти. Может возникнуть ситуация, когда пользователь, возвращаясь к выгруженному activity, хотел бы его увидеть в том состоянии, в котором его оставил. Это возможно, если перед выгрузкой activity вызвать метод onSaveInstanceState(), а во время восстановления или создания activity вызвать метод onRestoreInstanceState(). В этом случае возможно сохранение текущего (на момент выгрузки) состояния activity. Здесь можно провести аналогию с режимом гибернации в ОС для ПК.

Редакции сообщения
0

Ваше имя *

Ваш E-mail *

не публикуется

Текст сообщения *