Избранное сообщение

Использование списков для ввода данных в Excel / Office / Excel

Вообще при работе с любой информацией, а уж с управленческой в первую очередь, первоочередное значение имеет ее качество. Она обеспечивае...

Ездил на экскурсию на хлебокомбинат.
Больше я хлеб не ем...
Ездил на экскурсию на мясокомбинат.
Больше я мясо не ем...
Завтра экскурсия на ликеро-водочный завод.
Я не поеду...

суббота, 30 сентября 2017 г.

Отойди и не приставай - она моя! / Забавные и милые


MRT.exe что это за процесс в Windows 10 / Windows 10. Практика

Довольно часто пользователей интересует вопрос: «mrt exe - что это?». Если разобраться, то это сокращение от словосочетания Microsoft Removal Too - специальная программа Windows, которая является исполнимым файлом. Его основной функцией является автоматический запуск всевозможных средств удаления вирусов и вредоносного программного обеспечения. Это также можно назвать сканером, который очень быстро и оперативно распознает различные вирусы и шпионские программы в ОС Windows.
Кроме того, эта утилита способна обезвреживать их, отправляя в карантин или удалять полностью. Однако стоит помнить, что эта программа не является панацеей от вирусов. Она всего лишь обнаруживает их уже после тотального заражения компьютера и внедрения программного кода ПО в ОС Windows.
Чтобы понять, что это за процесс mrt exe, рекомендуем запустить утилиту и своими глазами увидеть ее в действии. Увидеть ее возможно, если изначально вы не удаляли ее с вашего устройства, а также, если вы используете оригинальную ОС Windows.

Где хранится mrt.exe?

Очевидно, что mrt exe – системная утилита, поэтому лежит она в папке Windows.
На рабочем столе открываем «Этот компьютер».














Далее, заходим в диск С. В нашем случае, он является системным. Как правило, во всех устройствах диск С содержит системную информацию и файлы, но могут быть исключения.
Выбираем папку «Windows».
Далее ищем папку под названием «System32» и заходим в нее.
В открывшемся диалогом окне с различными папками вам нужно найти файл под названием mrt exe.
Далее, его можно запустить для проверки компьютера на предмет вирусов или вредоносных программ.
Нужно помнить, что mrt exe не является антивирусом, так как:
  • она не предлагает пользователю автоматически ни единого средства для защиты от вирусов. Утилита производит удаление вирусов из ОС Windows уже после заражения последней;
  • работает по принципу обнаружения и определения только тех видов вирусов и шпионских программ, которые корпорацией Microsoft классифицируются как наиболее потенциально опасные и значимые. Тем временем, различные антивирусные приложения работают с гораздо широким спектром вирусов и способны распознавать намного больше программ, которые могут своими действиями нанести непоправимый урон компьютеру и хранящимся на нем файлам.
  • в отличие от антивирусов, обновление которых может выходить хоть каждый день, обновляется раз в месяц.
Заменить mrt exe для ОС Windows можно обычным антивирусом, что принесет большую пользу, так как он препятствует изначальному заражению устройства вирусами.

Как избавиться от mrt exe

В принципе, пользователь может и отказаться от mrt exe, так как множество различных вредоносных программ отлично маскируются под видом этого исполняемого файла, что вводит в заблуждение.
Если вам не нравится ее наличие на компьютере, или вы сталкиваетесь с различными ошибками, вы можете отключить ее или удалить. Для этого пользователю необходимо зайти в Диспетчер задач. Выполняется эта функция с помощью нажатия клавиш Ctrl+Alt+Delete. Найдите процесс mrt exe и отключите его правой кнопкой мыши.

Для удаления файла mrt exe, зайдите в system32, найдите его и нажмите клавишу Delete. Но делать это не рекомендуем. Еще одна защита не повредит. Если же он грузит процессор, то после запуска ПК просто остановите процесс, как было описано выше.
Кроме того, даже если на вашем компьютере имеется данная утилита, рекомендуем проводить систематические проверки хранящейся информации и приложений любой антивирусной программой, которая имеется в вашем доступе.


Смотри также:

На компьютере недостаточно памяти: избавляемся от проблемы / Системные сообщения об ошибках

Возникновение ошибки "На компьютере недостаточно памяти" обусловлено нехваткой оперативной, а также виртуальной памяти. В этой связи, наиболее вероятные причины, которые могут вызвать эту ситуацию, следующие:
  • Имеется реальная нехватка физической RAM;
  • На компьютере в данный момент запущено очень много процессов (это могут быть как программы, так и сессии внутри работающих приложений, например, вкладки браузера);
  • Жесткий диск практически полностью занят – в этом случае не получится нормально работать файлу подкачки;
  • Имеются также программы, которые могут вызвать так называемую «утечку памяти» - ситуацию, когда приложение для выполнения своих задач занимает все доступное пространство.
Именно по этим причинам операционная система выдает ошибку "Недостаточно памяти на компьютере,чтобы освободить память закройте программы".
Собственно, решение данной проблемы зависит от первопричины.
В случае физической нехватки оперативной памяти разумеется потребуется увеличить ее объем, приобретя планки RAM в магазине. В большинстве компьютеров сейчас используется 8 Гб, однако здесь все зависит от задач, для которых компьютер был куплен. Стоит также обратить внимание на поддержку большого числа планок материнской платой. Также, если компьютер не новый и в планах не стоит его апгрейд, то, к сожалению, придется смириться с такой работой системы.
Если причина в том, что жесткий диск полностью занят и на компьютере недостаточно памяти, то чтобы ее освободить потребуется утилита очистки диска. Прелесть ее в том, что она не позволит удалить файлы, которые используются системой и привести к ее неработоспособности. Другими словами, очистка диска утилитой Windows поможет безопасно удалить временные и ряд других, в большинстве случаев бесполезных, файлов. Запустить ее можно, нажав правой кнопкой мыши на диск C: и выбрав «Свойства» и затем «Очистка диска».


























Утилита проведет первичный анализ и покажет, какие файлы можно удалить. Как правило, в данном случае это будет не очень большой объем. Нажав на «Очистить системные файлы» пройдет еще один этап анализа и объем освобождаемого пространства наверняка будет увеличен.
























Также следует проверить, включен ли файл подкачки. Он используется в том случае, если для работы программ недостаточно памяти и требуется больше, чем в данный момент имеется физически – в этом случае нехватка будет компенсирована за счет свободного места на жестком диске. Необходимо открыть «Панель управления», далее «Система».
После открываем «Дополнительные параметры системы».
Далее нажимаем «Параметры» в разделе «Быстродействие».

























Переключаемся на вкладку «Дополнительно».































Щелкаем «Изменить».



























В данном окне можно управлять размером файла подкачки. Рекомендуется установить его размер автоматически.
В том случае, если памяти недостаточно из-за другой программы или множества процессов, то логично будет понять, какие это из них. В этом случае можно использовать Диспетчер задач, отсортировав процессы по столбцу «Память» на вкладке «Подробности».
Проведя анализ процессов в списке, Вы сможете решить, что с ними делать. Это может быть как штатным режимом работы (например, при обновлении), так и нештатным (внутренний сбой приложения), либо же это вообще может быть вредоносным ПО. В любом случае, проверка на вредоносные объекты не помешает. Как бы то ни было, если ошибку о том, что  памяти недостаточно вызывает определенное приложение, то рекомендуется обратиться в поддержку данного ПО для устранения негативных эффектов.

Источник: https://windowstips.ru/na-kompyutere-nedostatochno-pamyati

Смотри также:

Цифровое наследие: Что будет с вашими аккаунтами после смерти

По данным аналитической компании GfK, аудитория интернета в России составляет 84 миллиона человек — 70,4 % населения страны. Для большинства из них знакомство с Сетью началось с регистрации электронной почты или профиля в социальных сетях. У любителей шопинга со временем появились электронные кошельки, а у людей со склонностями к предпринимательству — собственные сайты. И хотя власти постоянно дорабатывают правила работы интернет-отрасли, регулирование пока так и не затронуло тему цифрового наследия. The Village разобрался, что сейчас происходит с аккаунтами, деньгами и доменами пользователей после их смерти и как они могут подготовиться к деактивации.

Социальные сети и блоги

Пока наиболее разнообразный набор вариантов для управления аккаунтом в случае смерти представлен в социальной сети FACEBOOK. Она позволяет заранее указать в настройках, что должно произойти со страницей. После того как администрацию сайта оповестят о смерти пользователя, его профиль либо автоматически удалится, либо обретет так называемый «памятный статус». В последнем случае все опубликованные записи будут доступны пользователям с прежними настройками приватности, а сам аккаунт перестанет отображаться в разделе «Вы можете их знать» или напоминаниях о днях рождения, а также дополнится специальной плашкой «Вспоминаем о...».
Также пользователь может еще при жизни назначить себе хранителя. После перевода аккаунта в памятный статус доверенному лицу разрешат опубликовать прощальный пост или информацию о похоронах на странице умершего. Вдобавок к этому он сможет отвечать на новые запросы о добавлении в друзья и менять фото профиля и обложку. Доступа к переписке, удалению контактов и редактированию старых записей у него не будет.
Во всех остальных популярных в России социальных сетях и блог-сервисах передачи прав на управление страницей по доверенности не предусмотрено. INSTAGRAM и «ЖИВОЙ ЖУРНАЛ», как и Facebook, позволяют перевести аккаунт умершего пользователя в мемориальный статус, а «ВКОНТАКТЕ» — законсервировать страницу, сохранив доступ к ее содержимому только для друзей. Также родственники могут отправить запрос на удаление профиля. Для этого им понадобится предоставить в службу поддержки копию свидетельства о смерти, ссылку на некролог или другое документальное подтверждение трагического события. Такая же функция доступна пользователям TWITTERLINKEDIN и «ОДНОКЛАССНИКОВ».
При этом все компании подчеркивают, что вне зависимости от степени родства пользователей они не предоставляют третьим лицам данные для прямого доступа к аккаунту и не раскрывают им содержание защищенных настройками приватности записей.

АННА БУТЫРИНА
председатель Московской городской коллегии адвокатов
В российском законодательстве нет специальных положений, регулирующих дальнейшую судьбу аккаунтов умерших пользователей, поэтому возможные действия наследников зависят от политики конкретной компании.
Социальные сети все чаще позволяют родственникам определять дальнейшую судьбу аккаунта, но не отдают им логин и пароль. Можно попробовать получить доступ через суд, однако положительной практики по этому вопросу пока нет. Объясняется это тем, что статья 23 Конституции декларирует право человека на неприкосновенность частной жизни, личную и семейную тайну, а также тайну переписки.
Хотя наше законодательство не содержит положений, которые бы позволяли передавать по наследству аккаунты в соцсетях, нет и запрета на это действие. Поэтому если человек укажет в своем завещании такой пункт, то наследники, возможно, и смогут получить полный доступ к странице. Решать здесь будет руководство социальной сети, а при их отказе — суд. Правда, социальные сети, зарегистрированные на иностранных ресурсах, могут и отказаться следовать решению российского суда.

Почтовые ящики

Среди почтовых сервисов наиболее комплексно к подготовке аккаунтов к смерти владельцев подошел GMAIL. Еще в 2013 году корпорация Google добавила в настройки конфиденциальности пункт «На всякий случай». Здесь можно установить срок, по истечении которого профиль переведут в разряд неактивных. Если система не получит ответа от пользователя по СМС или электронной почте, то аккаунт либо автоматически удалится, либо перейдет заранее указанным доверенным лицам, которых может быть несколько. При этом для каждого можно настроить уровни доступа не только к письмам, но и к данным во всех остальных сервисах Google — начиная с лайков в Google+ и чатов в Hangouts и заканчивая роликами на YouTube и постами в Blogger.
Еще один американский почтовый сервис — YAHOO! — позволяет лишь удалить аккаунт умершего пользователя по запросу от родственников или друзей. Настроить автоматическую передачу данных здесь нельзя.
Российские интернет-компании делают акцент на необходимости сохранения тайны переписки и не предоставляют доступ к почтовым ящикам третьим лицам даже при трагических обстоятельствах. В «РАМБЛЕРЕ» уточнили, что исключением может стать лишь решение суда. Удаления аккаунтов по запросу родственников также не предусмотрено, однако у некоторых сервисов по умолчанию прописаны сроки отключения неактивных пользователей: у «ПОЧТЫ MAIL.RU» это шесть месяцев, а у «ЯНДЕКС.ПОЧТЫ» — два года.

Электронные кошельки

Передача электронных денег умерших пользователей их родственникам в России регулируется наследственным правом.
«ЯНДЕКС.ДЕНЬГИ» предупреждают, что для того, чтобы средствами с кошелька могли воспользоваться другие люди, его владельцу потребуется еще при жизни пройти процедуру идентификации — предоставить компании заверенные паспортные данные. В таком случае в дальнейшем для перевода денег сервису будет достаточно заявления наследников с приложенными к нему копиями документов о смерти пользователя и их праве на наследство. Их можно отправить почтой или передать лично в офисе «Яндекс.Денег» в Москве, Санкт-Петербурге или Нижнем Новгороде.
В платежной системе WEBMONEY все пользователи получают уникальный идентификатор WMID, к которому прикрепляются кошельки в различных валютах, а также цифровое удостоверение личности с паспортными и контактными данными. Передача прав на управление аккаунтом по наследству рассматривается внутренним арбитражем. Перед подачей обращения наследнику понадобится зарегистрировать собственный WMID, оформить персональный аттестат и воспользоваться услугами нотариуса, чтобы уточнить баланс умершего пользователя на кошельках в WebMoney Transfer. При наличии нескольких наследников каждый из них должен самостоятельно обратиться в арбитраж.
Правила работы платежной системы QIWI отличаются от описанных выше предложений конкурентов. В компании заявляют, что деньги, зачисленные на баланс, не подлежат передаче по наследству — ими может распоряжаться только владелец аккаунта. Кроме того, здесь предусмотрен перевод пользователей, не совершавших никаких платежей больше 180 дней, в разряд неактивных. На следующий день после этого сервис начнет списывать со счета абонентскую плату — по 10 рублей в сутки. Если через три месяца баланс кошелька все еще будет больше 4,5 тысячи рублей, то с него начнут снимать по 0,35 % от общей суммы. После обнуления счета аккаунт удалится.

Домены

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

СВЕТЛАНА ЛИЕНКО
исполнительный директор REG.RU
Действительно, услуга передачи домена по наследству существует. Она особенно актуальна для владельцев коммерческих интернет-проектов, поскольку потеря доступа к сайту после смерти администратора сопряжена как минимум с неприятными хлопотами для партнеров, а как максимум — с приостановкой бизнес-процессов. Также этой возможностью можно воспользоваться, если ресурс представляет интерес для семьи администратора — например, если человек пишет музыку или стихи и размещает их на сайте.
В целом восстановить права на домен после смерти владельца возможно и без подобного соглашения, но для этого потребуется пройти ряд бюрократических процедур, требующих месяцев ожидания, а иногда и обращения в суд.


пятница, 29 сентября 2017 г.

В ожидании рыбки / Забавные и милые



Проекту GNU исполнилось 34 года / Бесплатное программное обеспечение (freeware)

Исполнилось 34 года с момента, когда Ричард Столлман основал проект GNU (Gnu's Not Unix), нацеленный на разработку системных компонентов для создания свободного аналога Unix, позволяющих полностью обойтись без проприетарного ПО. Спустя год была учреждена организация Free Software Foundation, а через четыре года подготовлена первая версия лицензии GPL, определившая юридические рамки модели распространения свободного программного обеспечения.

Проект GNU подразумевает содружество свободных проектов, двигающихся к общей цели и развиваемых в соответствии с единой идеологией и философией. Изначально, центральными звеньями проекта выступали ядро GNU, инструментарий для разработчиков и набор приложений и утилит для пользовательского окружения, в том числе текстовый редактор, табличный процессор, командная оболочка и даже набор игр. Развиваемое проектом ядро не получило должного распространения, но пользовательское окружение и инструментарий разработки оказались востребованными и в сочетании с ядром Linux легли в основу дистрибутивов GNU/Linux.

В настоящий момент под крылом GNU развивается 395 свободных проектов, среди которых GCC, Glibc, GNOME, Bash, Emacs, binutils, classpath, coreutils, sysutils, ddd, FreeFont, gawk, gdb, GetText, Ghostscript, GIMP, Gnash, GMediaServer, Gnumeric, gnuPg, gnuTLS, GTK+, Gzip, ядро linux-libre, MidnightCommander, ncurses, screen, wget. 

Смотри также:
Официальные сайты бесплатных компьютерных программ. http://fetisovvs.blogspot.com/2016/02/freeware.htmlЛучшие бесплатные утилиты шифрования файлов и папок. http://fetisovvs.blogspot.com/2015/04/freeware_17.html
Лучшие бесплатные программные пакеты для офиса (решения) http://fetisovvs.blogspot.com/2015/04/freeware.html

Как работает Android, часть 3 / Android. Разработка приложений


В этой статье я расскажу о компонентах, из которых состоят приложения под Android, и об идеях, которые стоят за этой архитектурой.

Статьи серии:

Web vs desktop

Если задуматься об отличиях современных веб-приложений от «обычных» десктопных приложений, можно — среди недостатков — выделить несколько преимуществ веба:

  • Веб-приложения переносимы между архитектурами и платформами, как и Java.
  • Веб-приложения не требуют установки и всегда обновлены, как и Android Instant Apps.

Кроме того, веб-приложения существуют в виде страниц, которые могут ссылаться друг на друга — как в рамках одного сайта, так и между сайтами. При этом страница на одном сайте не обязана ограничиваться ссылкой только на главную страницу другого, она может ссылаться на конкретную страницу внутри другого сайта (это называется deep linking). Ссылаясь друг на друга, отдельные сайты объединяются в общую сеть, веб.

Несколько копий одной страницы — например, несколько профилей в социальной сети — могут быть одновременно открыты в нескольких вкладках браузера. Интерфейс браузера рассчитан на переключение между одновременными сессиями (вкладками), а не между отдельными сайтами — в рамках одной вкладки вы можете перемещаться по ссылкам (и вперёд-назад по истории) между разными страницами разных сайтов.

Всё это противопоставляется «десктопу», где каждое приложение работает отдельно и часто независимо от других — и в этом плане то, как устроены приложения в Android, гораздо ближе к вебу, чем к «традиционным» приложениям.

Activities & intents


Основной вид компонентов приложений под Android — это activity. Activity — это один «экран» приложения. Activity можно сравнить со страницей в вебе и с окном приложения в традиционном оконном интерфейсе.


Например, в приложении для электронной почты (email client) могут быть такие activity, как Inbox Activity (список входящих писем), Email Activity (чтение одного письма), Compose Activity (написание письма) и Settings Activity (настройки).

Как и страницы одного сайта, activity одного приложения могут запускаться как друг из друга, так и независимо друг от друга (другими приложениями). Если в вебе на другую страницу обращаются по URL (ссылке), то в Android activity запускаются через intent’ы.

Intent — это сообщение, которое указывает системе, что нужно «сделать» (например, открыть данный URL, написать письмо на данный адрес, позвонить на данный номер телефона или сделать фотографию).

Приложение может создать такой intent и передать его системе, а система решает, какая activity (или другой компонент) будет его выполнять (handle). Эта activity запускается системой (в существующем процессе приложения или в новом, если он ещё не запущен), ей передаётся этот intent, и она его выполняет.

Стандартный способ создавать intent’ы — через соответствующий класс в Android Framework. Для работы с activity и intent’ами из командной строки в Android есть команда am — обёртка над стандартным классом Activity Manager:



$ am start -a android.intent.action.VIEW -d http://example.com

$ am start -a android.intent.action.CALL -d tel:+7-916-271-05-83

Intent’ы могут быть явными (explicit) и неявными (implicit). Явный intent указывает идентификатор конкретного компонента, который нужно запустить — чаще всего это используется, чтобы запустить из одной activity другую внутри одного приложения (при этом intent может даже не содержать другой полезной информации).

Неявный intent обязательно должен указывать действие, которое нужно сделать. Каждая activity (и другие компоненты) указывают в манифесте приложения, какие intent’ы они готовы обрабатывать (например, ACTION_VIEW для ссылок с доменом https://example.com). Система выбирает подходящий компонент среди установленных и запускает его.

Если в системе есть несколько activity, которые готовы обработать intent, пользователю будет предоставлен выбор. Обычно это случается, когда установлено несколько аналогичных приложений, например несколько браузеров или фоторедакторов. Кроме того, приложение может явно попросить систему показать диалог выбора (на самом деле при этом переданный intent оборачивается в новый intent с ACTION_CHOOSER) — это обычно используется для создания красивого диалога Share:


Кроме того, activity может вернуть результат в вызвавшую её activity. Например, activity в приложении-камере, которая умеет обрабатывать intent «сделать фотографию» (ACTION_IMAGE_CAPTURE) возвращает сделанную фотографию в ту activity, которая создала этот intent.

При этом приложению, содержащему исходную activity, не нужно разрешение на доступ к камере.

Таким образом, правильный способ приложению под Android сделать фотографию — это не потребовать разрешения на доступ к камере и использовать Camera API, а создать нужный intent и позволить системному приложению-камере сделать фото. Аналогично, вместо использования разрешения READ_EXTERNAL_STORAGE и прямого доступа к файлам пользователя стоит дать пользователю возможность выбрать файл в системном файловом менеджере (тогда исходному приложению будет разрешён доступ именно к этому файлу).

A unique aspect of the Android system design is that any app can start another app’s component. For example, if you want the user to capture a photo with the device camera, there’s probably another app that does that and your app can use it instead of developing an activity to capture a photo yourself. You don’t need to incorporate or even link to the code from the camera app. Instead, you can simply start the activity in the camera app that captures a photo. When complete, the photo is even returned to your app so you can use it. To the user, it seems as if the camera is actually a part of your app.
При этом «системное» приложение — не обязательно то, которое было предустановлено производителем (или автором сборки Android). Все установленные приложения, которые умеют обрабатывать данный intent, в этом смысле равны между собой. Пользователь может выбрать любое из них в качестве приложения по умолчанию для таких intent’ов, а может выбирать нужное каждый раз. Выбранное приложение становится «системным» в том смысле, что пользователь выбрал, чтобы именно оно выполняло все задачи (то есть intent’ы) такого типа, возникающие в системе.

Само разрешение на доступ к камере нужно только тем приложениям, которые реализуют свой интерфейс камеры — например, собственно приложения-камеры, приложения для видеозвонков или дополненной реальности. Наоборот, обыкновенному мессенджеру доступ к камере «чтобы можно было фото отправлять» не нужен, как не нужен и доступ к совершению звонков приложению крупного банка.


Многие операционные системы делятся на собственно операционную систему и приложения, установленные поверх, ничего друг о друге не знающие и не умеющие взаимодействовать. Система компонентов и intent’ов Android позволяет приложениям, по-прежнему абсолютно ничего друг о друге не зная, составлять для пользователя один интегрированный системный user experience — установленные приложения реализуют части одной большой системы, они составляют из себя систему. И это, с одной стороны, происходит прозрачно для пользователя, с другой — представляет неограниченные возможности для кастомизации.

По-моему, это очень красиво.

Tasks & back stack


Как я уже говорил, в браузере пользователь может переключаться не между сайтами, а между вкладками, история каждой из которых может содержать много страниц разных сайтов. Аналогично, в Android пользователь может переключаться между задачами(tasks), которые отображаются в виде карточек на recents screen. Каждая задача представляет собой back stack — несколько activity, «наложенных» друг на друга.

Когда одна activity запускает другую, новая activity помещается в стек поверх старой. Когда верхняя activity в стеке завершается — например, когда пользователь нажимает системную кнопку «назад» — предыдущая activity в стеке снова отображается на экране.

Back stack

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

При запуске новой activity могут быть указаны специальные флаги, такие как singleTopsingleTasksingleInstance и CLEAR_TOP, которые модифицируют этот механизм. Например, приложения-браузеры обычно разрешают запуск только одной копии своей основной activity, и для переключения между открытыми страницами реализуют собственную систему вкладок. С другой стороны, Custom Tabs — пример activity в браузере (чаще всего Chrome), которая ведёт себя почти «как обычно», то есть показывает только одну страницу, но позволяет одновременно открывать несколько своих копий.

App lifecycle


Одно из основных ограничений встраиваемых и мобильных устройств — небольшое количество оперативной памяти (RAM). Если современные флагманские устройства уже оснащаются несколькими гигабайтами оперативной памяти, то в первом смартфоне на Android, HTC Dream (он же T-Mobile G1), вышедшем в сентябре 2008 года, её было всего 192 мегабайта.

HTC Dream

Проблема ограниченной памяти дополнительно осложняется тем, что в мобильных устройствах, в отличие от «обычных» компьютеров, не используются swap-разделы (и swap-файлы) — в том числе и из-за низкой (по сравнению с SSD и HDD) скорости доступа к SD-картам и встроенной флеш-памяти, где они могли бы размещаться. Начиная с версии 4.4 KitKat, Android использует zRAM swap, то есть эффективно сжимает малоиспользуемые участки памяти. Тем не менее, проблема ограниченной памяти остаётся.

Если все процессы представляют собой для системы чёрный ящик, лучшая из возможных стратегия поведения в случае нехватки свободной памяти — принудительно завершать («убивать») какие-то процессы, что и делает Linux Out Of Memory (OOM) Killer. Но Android знает, что происходит в системе, ему известно, какие приложения и какие их компоненты запущены, что позволяет реализовать гораздо более «умную» схему освобождения памяти.

Во-первых, когда свободная память заканчивается, Android явно просит приложения освободить ненужную память (например, сбросить кэш), вызывая методы onTrimMemory/onLowMemory. Во-вторых, Android может эффективно проводить сборку мусора в фоновых приложениях, освобождая память, которую они больше не используют (на уровне Java), при этом не замедляя работу текущего приложения.

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

Система автоматически выбирает компоненты, наименее важные для пользователя (например, activity, из которых пользователь давно ушёл), даёт им шанс дополнительно освободить ресурсы, вызывая такие методы, как onDestroy, и завершает их, полностью освобождая используемую ими память и ресурсы (в том числе view hierarchy в случае activity). После этого, если в процессе приложения не осталось запущенных компонент, процесс может быть завершён.

Если пользователь возвращается в activity, завершённую системой из-за нехватки памяти, эта activity запускается снова. При этом перезапуск происходит прозрачно для пользователя, поскольку activity сохраняет своё состояние при завершении (onSaveInstanceState) и восстанавливает его при последующем запуске. Реализованные в Android Framework виджеты используют этот механизм, чтобы автоматически сохранить состояние интерфейса (UI) при перезапуске — с точностью до введённого в EditText текста, положения курсора, позиции прокрутки (scroll) и т.д. Разработчик приложения может дополнительно реализовать сохранение и восстановление каких-то ещё данных, специфичных для этого приложения.

С точки зрения пользователя этот механизм похож на использование swap: в обоих случаях при возвращении в выгруженную часть приложения приходится немного подождать, пока она загружается снова — в одном случае, с диска, в другом — пересоздаётся по сохранённому состоянию.

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

Services


Приложениям может потребоваться выполнять действия, не связанные напрямую ни с какой activity, в том числе, продолжать делать их в фоне, когда все activity этого приложения завершены. Например, приложение может скачивать из сети большой файл, обрабатывать фотографии, воспроизводить музыку, синхронизировать данные или просто поддерживать TCP-соединение с сервером для получения уведомлений.

Такую функциональность нельзя реализовывать, просто запуская отдельный поток — это было бы для системы чёрным ящиком; в том числе, процесс был бы завершён при завершении всех activity, независимо от состояния таких фоновых операций. Вместо этого Android предлагает использовать ещё один вид компонентов — сервис.

Сервис нужен, чтобы сообщить системе, что в процессе приложения выполняются действия, которые не являются частью activity этого приложения. Сам по себе сервис не означает создание отдельного потока или процесса — его точки входа (entry points) запускаются в основном потоке приложения. Обычно реализация сервиса запускает дополнительные потоки и управляет ими самостоятельно.

Сервисы во многом похожи на activity: они тоже запускаются с помощью intent’ов и могут быть завершены системой при нехватке памяти.

Запущенные сервисы могут быть в трёх состояниях:

  • Foreground service — сервис, выполняющий действие, состояние которого важно для пользователя, например, загрузка файла или воспроизведение музыки. Такой сервис обязан отображать уведомление в системной шторке уведомлений (примеры: состояние загрузки, название текущей песни и управление воспроизведением). Система считает такой сервис примерно настолько же важным для пользователя, как и текущая activity, и завершит его только в крайнем случае.


  • Background service — сервис, выполняющий фоновое действие, состояние которого не интересует пользователя (чаще всего, синхронизацию). Такие сервисы могут быть завершены при нехватке памяти с гораздо большей вероятностью. В старых версиях Android большое количество одновременно запущенных фоновых сервисов часто становилось причиной «тормозов»; начиная с версии 8.0 Oreo, Android серьёзно ограничивает использование фоновых сервисов, принудительно завершая их через несколько минут после того, как пользователь выходит из приложения.
  • Bound service — сервис, обрабатывающий входящее Binder-подключение. Такие сервисы предоставляют какую-то функциональность для других приложений или системы (например, WallpaperService и Google Play Services). В этом случае система может автоматически запускать сервис при подключении к нему клиентов и останавливать его при их отключении.

Рекомендуемый способ выполнять фоновые действия — использование JobScheduler, системного механизма планирования фоновой работы. JobScheduler позволяет приложению указать критерии запуска сервиса, такие как:

  • Доступность сети. Здесь приложение может указать, требуется ли этому сервису наличие сетевого подключения, и если да, то возможна ли работа в роуминге или при использовании лимитного (metered) подключения.
  • Подключение к источнику питания, что позволяет сервисам выполняться, не «сажая батарею».
  • Бездействие (idle), что позволяет сервисам выполняться, пока устройство не используется, не замедляя работу во время активного использования.
  • Обновления контента — например, появление новой фотографии.
  • Период и крайний срок запуска — например, очистка кэша может производиться ежедневно, а синхронизация событий в календаре — каждый час.

JobScheduler планирует выполнение (реализованное как вызов через Binder) зарегистрированных в нём сервисов в соответствии с указанными критериями. Поскольку JobScheduler — общесистемный механизм, он учитывает при планировке критерии зарегистрированных сервисов всех установленных приложений. Например, он может запускать сервисы по очереди, а не одновременно, чтобы предотвратить резкую нагрузку на устройство во время использования, и планировать периодическое выполнение нескольких сервисов небольшими группами (batch), чтобы предотвратить постоянное энергозатратное включение-выключение радиооборудования.


Broadcast receivers & content providers


Кроме activity и сервисов, у приложений под Android есть два других вида компонентов, менее интересных для обсуждения — это broadcast receiver’ы и content provider’ы.

Broadcast receiver — компонент, позволяющий приложению принимать broadcast’ы, специальный вид сообщений от системы или других приложений. Исходно broadcast’ы, как следует из названия, в основном использовались для рассылки широковещательных сообщений всем подписавшимся приложениям — например, система посылает сообщение AIRPLANE_MODE_CHANGED при включении или отключении самолётного режима.

Сейчас вместо подписки на такие broadcast’ы, как NEW_PICTURE и NEW_VIDEO, приложения должны использовать JobScheduler. Broadcast’ы используются либо для более редких событий (таких как BOOT_COMPLETED), либо с явными intent’ами, то есть именно в качестве сообщения от одного приложения к другому.

Content provider — компонент, позволяющий приложению предоставлять другим приложениям доступ к данным, которыми оно управляет. Пример данных, доступ к которым можно получить таким образом — список контактов пользователя.

При этом приложение может хранить сами данные каким угодно образом, в том числе на устройстве в виде файлов, в настоящей базе данных (SQLite) или запрашивать их с сервера по сети. В этом смысле content provider — это унифицированный интерфейс для доступа к данным, независимо от формы их хранения.

Взаимодействие с content provider’ом во многом похоже на доступ к удалённой базе данных через REST API. Приложение-клиент запрашивает данные по URI (например, content://com.example.Dictionary.provider/words/42) через ContentResolver. Приложение-сервер определяет, к какому именно набору данных был сделан запрос, используя UriMatcher, и выполняет запрошенное действие (query, insert, update, delete).

Именно поверх content provider’ов реализован Storage Access Framework, позволяющий приложениям, хранящим файлы в облаке (например, Dropbox и Google Photos) предоставлять доступ к ним остальным приложениям, не занимая место на устройстве полной копией всех хранящихся в облаке файлов.
Источник: https://habrahabr.ru/company/solarsecurity/blog/338494/?utm_source=habrahabr&utm_medium=rss&utm_campaign=interesting

Смотри также:

Учимся программировать под Андроид. http://fetisovvs.blogspot.com/2017/08/android.html
Android и архитектура. http://fetisovvs.blogspot.nl/2017/05/android-android_20.html
Новая архитектура Android-приложений — пробуем на практике. http://fetisovvs.blogspot.nl/2017/06/android-android.html
Шпаргалка по тестированию требований к мобильным приложениям. http://fetisovvs.blogspot.com/2017/09/android_6.html
Для чего нужен Android-эмулятор BlueStacks. http://fetisovvs.blogspot.com/2016/11/android-bluestacks-android.html
Теория по Service в Android. http://fetisovvs.blogspot.com/2017/09/service-android-android.html
Пример использования ScrollView в Android. http://fetisovvs.blogspot.com/2016/09/scrollview-android-android.html
Пример использования ViewFlipper в Android. Обзор контейнера ViewFlipper. http://fetisovvs.blogspot.com/2016/09/viewflipper-android-viewflipper-java.html
Remix OS Player – новый эмулатор Android для Windows. http://fetisovvs.blogspot.com/2016/09/remix-os-player-android-windows-android.html
Стабилизация экрана в Android. http://fetisovvs.blogspot.com/2016/12/android-android.html
Интеграция Android-приложения с фискальным принтером и кардридером. http://fetisovvs.blogspot.com/2017/04/android-android.html
Создание простейшей 2D игры на андроид. http://fetisovvs.blogspot.com/2017/06/2d-android.html