Процессы и потоки в Android: пишем AsyncTask правильно
Продолжаю свои повествования об Android. И в этот раз хочу поделиться ценной информацией о процессах и потоках, которая должна быть хорошо усвоена и всегда оставаться под рукой во избежании ошибок и недопонимания при написании приложений. В конце статьи приведу пример реализации AsyncTask, который загружает в ImageView картинку по нажатию на кнопку.
Прежде всего отмечу, что подробнее о данной теме можно прочесть в данном руководстве — developer.android.com/guide/topics/fundamentals/processes-and-threads.html
На заметку о процессах и потоках в Android
Когда запускается компонент приложения и приложение не имеет других запущенных компонентов, Android создает новый процесс для приложения с одним потоком исполнения. По умолчанию все компоненты одного приложения запускаются в одном процессе, в потоке называемом «главный». Если компонент приложения запускается и уже существует процесс для данного приложения(какой-то компонент из приложения существует), тогда компонент запущен в этом процессе и использует его поток выполнения. Вы можете изменить данное поведение, задав разные процессы для разных компонентов вашего приложения. Кроме того вы можете добавить потоки в любой процесс.
Задать отдельный процесс для компонента можно с помощью файла манифеста. Каждый тег компонента(activity, service, receiver и provider) поддерживает атрибут android:process. Данный атрибут позволяет задать процесс, в котором будет выполняться компонент. Также вы можете задать процесс в котором будут выполняться компоненты разных приложений. Также данный атрибут поддерживается тегом application, что позволяет задать определенный процесс для всех компонентов приложения.
Android пытается поддерживать процесс приложения как можно дольше, но когда потребуются ресурсы старые процессы будут вытеснены по иерархии важности.
Существует 5 уровней иерархии важности: (процессы первого уровня из списка будут удалены последними)
1.Процесс с которым взаимодействует пользователь(Foreground process)
К таким процессам относится например: активити с которым взаимодействует пользовать; сервис(экземпляр Service), с которым взаимодействует пользователь; сервис запущенный методом startForeground(); сервис, который выполняет один из методов своего жизненного цикла; BroadcastReceiver который выполняет метод onReceive().
2.Видимый процесс
Процесс, в котором не выполнены условия из пункта №1, но который влияет на то, что пользователь видит на экране. К примеру, вызван метод onPause() активити.
3.Сервисный процесс
Служба запущенная методом startService()
4.Фоновый процесс
Процесс выполняемый в фоновом режиме, который невиден пользователю.
Отмечу, что в компонентах приложения существует метод onLowMemory(), но полагаться на то, что данный метод будет вызван нельзя, также как нельзя на 100% полагаться на метод onDestroy(), поэтому логику сохранения данных или каких-либо настроек можно осуществить в методе onStop(), который(как уверяют) точно вызывается.
Когда запускается приложение, система создает «главный» поток выполнения для данного приложения, который также называется UI-потоком. Этот поток очень важен, так как именно в нем происходит отрисовка виджетов(кнопочек, списков), обработка событий вашего приложения. Система не создает отдельный поток для каждого экземпляра компонента. Все компоненты, которые запущенны в одном процессе будут созданы в потоке UI. Библиотека пользовательского интерфейса Android не является потоково-безопасной, поэтому необходимо соблюдать два важных правила:
1) Не блокировать поток UI
2) Не обращаться к компонентам пользовательского интерфейса не из UI-потока
Теперь, предположим, что у нас возникла задача — загрузить картину в ImageView из сети и тут же ее отобразить. Как мы поступим? По логике: мы создадим отдельный поток, который и сделает всю нашу работу, примерно так:
Выглядит правдоподобно, так как мы вынесли операцию загрузки картинки в отдельный поток. Проблема в том, что мы нарушили правило №2. Исправить эту проблему можно с помощью следующих методов:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
К примеру, воспользуемся первым из них:
Теперь реализация потоково-безопасная: сетевая операция выполняется в отдельном потоке, а к ImageView обращаемся из потока UI.
К счастью, данные операции можно объединить с помощью наследования класса Handler и реализации нужной логики, но лучшее решение — наследовать класс AsyncTask.
AsyncTask позволяет выполнить асинхронную работу и делать обновления пользовательского интерфейса.
Для обновления реализуйте метод onPostExecute(), а всю фоновую работу заключите в метод doInBackground(). После того, как вы реализуете свою собственную задачу, необходимо ее запустить методом execute().
Привожу обещанный пример AsyncTask, в котором реализована задача загрузки и отображения картинки(вариант с аннотациями и отклонением от применения стандартного протокола диалогов):
А теперь рассмотрим самый правильный вариант с точки зрения работы с диалогами:
Кода стало побольше, но лучше использовать стандартный протокол работы с диалогами.
Также я убрал все аннотации, чтобы новичкам было проще попробовать данный код.
Не забудьте добавить в свою разметку кнопочки атрибут с указанным значением: android:onClick=«runButtonHandler»
И добавлю: в оффициальном документе(Тыц ) также, как и в моем случае, не используется preExecute(), но если вам понадобится выполнить какие-то действия с вашим пользовательским интерфейсом до начала выполнения задачи, то смело используйте данный метод.
Параметры передаваемые в AsyncTask:
1. Параметры(в нашем случае адрес URL).
2. Прогресс (единицы задающие ход изменения задачи). В нашем случае не используется.
3. Результат выполнения задачи(в нашем случае объект Bitmap)
Код довольно прост: всю фоновую работу мы выполняем в методе doInBackGround(), вызывая метод publishProgress(), чтобы во время загрузки картинки крутился наш ProgressDialog при вызове метода onProgressUpdate(). После выполнения фоновой работы вызывается метод onPostExecute() в который передается результат работы метода doInBackGround(), в нашем случае это объект Bitmap и тут же мы его загружаем в ImageView.
Отмечу пару важных моментов, которые нужно учитывать:
1) Метод doInBackGround() выполняется в фоновом потоке, потому доступа к потоку UI внутри данного метода нет.
2) Методы onPostExecute() и onProgressUpdate() выполняются в потоке UI, потому мы можем смело обращаться к нашим компонентам UI.
Да, я снова применил библиотеку android-annotations, так что не пугайтесь аннотациям.
Хочу отметить важность понимания модели работы процессов в Android, чтобы не допустить ошибок при разработке приложений.
Данная статья это переработка доступной информации + личный опыт при реализации указанной задачи и работе с потоками.
Как всегда пожелания и замечания по поводу материала статьи в личку. Если вам есть что-то добавить или дополнить — смело пишите в комментарии.
UPD Статья обновленна добавлением более правильной версии в плане работы с диалогами.
Источник
Представлена новая мобильная операционная система OS TOS+
Новая мобильная платформа предназначена для умных часов, телевизоров и других устройств с подключением к интернету, а также для осуществления мобильных платежей.
Впервые обсуждение данной ОС, созданной владельцем популярных социальных сервисов QQ и WeChat, начали вестись в прошлом году, поэтому можно сказать, что программный продукт был разработан достаточно быстро.
В январе текущего года Tencent запустил программную платформу для смартфонов, а новая разработка ориентирована на портативные гаджеты и бытовую технику. Лицензирование Tencent OS и TOS + будет бесплатным, как и Android. По словам исполнительного директора Tencent Марка Рена, платформа будет ориентирована на интеграцию с социальными сервисами. Кроме продвинутых социальных опций, представленная система позволяет зарабатывать деньги через интегрированные в нее услуги.
Появление новой ОС еще не означает успех. Так, в прошлом месяце ведущий китайский поисковый гигант Baidu был вынужден отказаться от активного развития платформы Cloud OS. Конкурировать с TOS + будут такие системы, как Android Wear и Samsung Tizen.
Источник
Что такое tos android
Новые темы необходимо создавать только в корневом разделе! В дальнейшем они будут обработаны модераторами.
Обсуждение Samsung GT-P3100 / GT-P3110 Galaxy Tab 2 7.0Samsung GT-P3100 Galaxy Tab 2 7.0, GT-P3110, GT-P3113
Описание 2 7.0 | Описание 2 7.0 Wi-Fi | Обсуждение» | Покупка» | Аксессуары» | Прошивка» | Прошивка CyanogenMod 6.x.x-7.x.x» | Игры» | Клуб владельцев Samsung Galaxy Tab 2 7.0»
- Перед тем как задать вопрос, посмотрите FAQ по Android OS и Глоссарий . Уважайте своё и чужое время.
- Для обсуждения и поиска сторонних программ/игр пользуйтесь разделами:ПрограммыиИгры.
- Для сравнения устройства с конкурентами и по вопросам выбора устройств обращайтесь в раздел:Выбор и сравнение.
- Доступный объем оперативной памяти и памяти для установки приложений обсуждается в теме:Cколько памяти у вас в аппарате?
- Результаты тестов производительности Android устройств смотрите в теме:Benchmark
- Перед публикацией изображений, ознакомьтесь с Как работать с фотографиями на форуме.
- Сообщения не по теме удаляются.
Первый планшет Samsung на платформе Android 4.0 (Ice Cream Sandwich) включает ряд новых и усовершенствованных функций. Обновленный магазин приложений Android Market открывает доступ к 400 000 приложений для смартфонов и планшетов. Новый дизайн галереи приложений облегчает доступ к любимому контенту. Значительно возросшая производительность новой операционной системы и малое время отклика при работе с множеством приложений дополняется поддержкой сетей Wi-Fi или HSPA+ со скоростью передачи данных до 21 Мбит/сек.
Планшет на платформе Android 4.0 также оснащен приложениями и сервисами Google. Инновационная функция «Фейсконтроль» снимает блокировку планшета при помощи технологии распознавания лица.
Samsung Galaxy Tab 2 (7.0) предоставляет пользователям богатые возможности доступа, воспроизведения и обмена мультимедийными файлами при помощи фирменных сервисов Samsung. Сервис «Книги и пресса» открывает доступ к более, чем 60,000 электронных книг и 4,000 газет и журналов на 47 языке, включая русский, в то время как с помощью «Игрового портала» пользователи смогут загрузить новейшие игры.
Samsung также представляет сервис Yota Play для планшетов Samsung Galaxy Tab, представленных на российском рынке. С помощью популярного сервиса, который будет предустановлен на планшет, пользователям станет доступна коллекция из более, чем 3,000 фильмов.
Мультимедийные возможности планшета Samsung Galaxy Tab 2 (7.0) дополняет обновленный пользовательский интерфейс TouchWiz, который снабжен виджетами сервисов Samsung и обеспечивает мгновенный доступ к пользовательскому контенту. А новый сервис S Suggest в режиме реального времени предлагает рекомендации по выбору приложений, которые наиболее соответствуют вкусам пользователей.
Samsung Galaxy Tab 2 (7.0) обеспечивает расширенные возможности для развлечений с новой технологией AllShare Play. AllShare Play позволяет пользователям передавать контент, воспроизводящийся на планшете, на компьютеры и ноутбуки, а также другие устройства Samsung, в том числе телевизоры Samsung Smart TV и устройства сторонних производителей. Пользователи также легко могут отправлять файлы на другие устройства или непосредственно на популярные веб-сервисы.
Коммуникационные возможности Samsung Galaxy Tab 2 (7.0) делают общение легким и приятным. Новый планшет поддерживает голосовые вызовы, отправку SMS и видеозвонки. Планшет может стать запасным устройством на случай, если пользователь забудет дома основной телефон. Планшет также позволяет пользователю самостоятельно организовать групповые видео звонки через Google+ hangouts, а также участвовать в групповых чатах или общаться в группах и обмениваться контентом.
Коммуникационный сервис Samsung ChatON объединяет в единое сообщество всех пользователей мобильных устройств на любой платформе. Вместо имен и паролей данный сервис использует номера телефонов пользователей и позволяет обмениваться мгновенными сообщениями и переписываться в групповых чатах, используя изображения, видео, голосовые заметки, контакты — все, чтобы сделать общение простым и интуитивно понятным.
Планшет доступен в модификациях для сетей 3G и WiFi с 8, 16 или 32 ГБ встроенной памяти. Samsung Galaxy Tab 2 (7.0) поступит в продажу в Великобритании в марте 2012 года, после чего станет доступен в других странах мира.
Разборка аппарата
Если у кого-то глюки с тачвизом(не ставятся ярлыки на раб. стол, не удаляются раб. столы, как на 4.0) после обновления с 4.0 до 4.1, то идём в: диспетчер приложений/все/экран touchwiz/очистить данные + очистить кэш + сбросить настройки по умолчанию.
Усиление сигнала WI-Fi
Прежде чем задавать вопросы, загляните в FAQ
Сообщение отредактировал Lexx808 — 23.12.18, 22:44
Источник
Троянское приложение для Android обходит проверки Google Bouncer
Аналитики ESET обнаружили интересный метод скрытной атаки на пользователей Android, который содержит в себе интересную особенность. В магазине приложений Google Play нам удалось обнаружить несколько приложений, которые маскировались под легитимные, но на самом деле содержали в себе другое приложение с вредоносными функциями. Это встроенное приложение называлось systemdata или resourcea.
Это второе приложение скрытно сбрасывается в память устройства из первого, но спрашивает у пользователя разрешение на установку. Оно представляется в качестве инструмента для управления настройками устройства «Manage Settings». После своей установки, приложение работает как служба в фоновом режиме.
Антивирусные продукты ESET обнаруживают приложения, которые содержат в себе это дополнительное приложение как Android/TrojanDropper.Mapin. Согласно нашим данным, на долю Индии приходится наибольшее количество заражений устройств Android этим вредоносным ПО.
Вредоносная программа представляет из себя бэкдор, который получает контроль над устройством и включает его в состав ботнета. Бэкдор использует специальный внутренний таймер для отложенного исполнения своей полезной нагрузки. Таким образом, авторы могут обмануть различные автоматические системы анализа файлов, которые могут причислить файл к подозрительным из-за его поведения. В некоторых случаях, бэкдор может ждать три дня прежде чем активировать полезную нагрузку. Скорее всего, такая мера позволяет авторам обойти механизмы проверки инструмента анализа файлов Google Bouncer, используемый Google для проверки загружаемых в Play приложений.
После активации полезной нагрузки, троян запрашивает права администратора в системе и начинает взаимодействовать со своим C&C-сервером. Android/Mapin содержит в себе различные функции, например, отображение пользователю различных уведомлений, загрузка, установка и запуск других приложений, а также получение личной информации пользователя на устройстве. В то же время, основной его функцией является отображение fullscreen-рекламы на зараженном устройстве.
Вредоносные приложения были размещены в магазине приложений Google Play в конце 2013 г. и в 2014 г. Названия приложений были различными, включая, «Hill climb racing the game», «Plants vs zombies 2», «Subway suffers», «Traffic Racer», «Temple Run 2 Zombies», «Super Hero Adventure» разработчиков TopGame24h, TopGameHit и SHSH. Точные даты загрузки приложений были 24-30 ноября 2013 г. и 22 ноября 2014 г. Согласно статистике ресурса MIXRANK, приложение Plants vs zombies 2 было загружено более 10 тыс. раз перед его удалением из магазина. В то же самое время, приложения «System optimizer», «Zombie Tsunami», «tom cat talk», «Super Hero adventure», «Classic brick game», а также вышеупомянутые приложения Google Play с вредоносными возможностями, были загружены в альтернативные магазины приложений Android теми же авторами. Такой же бэкдор был обнаружен в комплекте с другими приложениями, которые были загружены в магазин разработчиком PRStudio (не путать с prStudio) в альтернативные магазины приложений со ссылками на Google Play. Данный разработчик загрузил как минимум и пять других троянских приложений в альтернативные магазины приложений: «Candy crush» или «Jewel crush», «Racing rivals», «Super maria journey», «Zombie highway killer», «Plants vs Zombies». Эти приложения все еще доступны для скачивания из этих магазинов. Перечисленные приложения были загружены пользователями сотни раз.
Рис. Значки вредоносных приложений.
Рис. Вредоносное приложение, которое получило достаточно положительных оценок.
Рис. Еще одно приложение, получившее положительные оценки.
Существуют различные варианты исполнения вредоносной программы после того, как пользователь загрузил нелегитимное приложение. Один из вариантов предполагает, что жертве будет предложено запустить файл с вредоносной программой спустя 24 после первого исполнения загруженного приложения. Такой метод является менее подозрительным для пользователя, который считает, что запрос на запуск поступил от ОС. Другой метод подразумевает под собой выдачу мгновенного запроса пользователю. Оба варианта рассчитаны на срабатывание после изменения подключения к сети, для этого вредоносная программа регистрирует т. н. broadcast receiver в манифесте.
Рис. Регистрация т. н. broadcast receiver.
После изменения подключения, пользователю будет предложено установить «системное приложение». Само сброшенное на устройство вредоносное приложение может называться «Google Play Update» или «Manage Settings».
Рис. Вредоносное приложение маскируется под системное.
В том случае, если пользователь выбирает отмену установки, то вредоносная программа будет показывать запрос каждый раз при смене сетевого подключения. Можно предположить, что простой пользователь будет уверен в серьезности отображаемого уведомления и в какой-то момент, скорее всего, нажмет кнопку установки только чтобы избавиться от него. После запуска троян исполняется в качестве сервиса со своим зарегистрированным broadcast receiver, ожидая изменения подключения.
Когда такое изменение произойдет, троян попытается зарегистрировать себя с помощью сервиса Google Cloud Messages (GCM) для последующего получения сообщений. После этого, Android/Mapin попытается зарегистрировать зараженное устройство на сервере злоумышленников, отправляя туда такую информацию как имя пользователя, аккаунт Google, IMEI, регистрационный идентификатор (ID) и название своего пакета приложения.
Рис. Процесс регистрации устройства на сервере злоумышленников.
Для того, чтобы исключить возможность своего удаления из системы, троян требует от пользователя активировать режим администратора устройства.
Рис. Предложение пользователю об активации режима администратора устройства.
Троян сообщит на удаленный сервер об успешности активации режима администратора устройства. Как только такая операция произойдет, вредоносная программа будет показывать пользователю рекламу в полноэкранном режиме (interstitial). Такая реклама (interstitial ad) будет отображаться пользователю заново каждый раз при смене подключения. Разработка такого типа рекламы возможна с использованием легитимного AdMob SDK.
Рис. Full-screen реклама (interstitial ad).
Троян взаимодействует со своим управляющим сервером используя сервис Google Cloud Messaging (GCM). Этот сервис все чаще используется современными вредоносными программами для своих целей, через него злоумышленники могут инструктировать бот на выполнение нужных им действий.
Рис. Обрабатываемые ботом команды.
Не все функции вредоносной программы полностью реализованы в ее коде, кроме этого, не все уже реализованные функции используются. Возможно, что сама угроза все еще находится на уровне разработки и будет улучшена в будущем. Как мы уже упоминали, ее основная цель заключается в доставке агрессивной full-screen рекламы для ее отображения пользователю, маскируясь под системное приложение. Бот также может быть использован злоумышленниками для установки другого вредоносного ПО на скомпрометированное устройство.
Кроме показа рекламы, список выполняемых им вспомогательных функций достаточно обширен: изменение идентификатора publisher ID отображаемой рекламы, загрузка и запуск других приложений, отображение уведомлений пользователю, отключение режима администратора устройства, изменение адреса управляющего C&C-сервера, создание на домашнем экране Android ярлыков, которые ведут на URL-адреса загрузки приложений. После исполнения каждой задачи, полученной с помощью GCM, бот будет информировать об этом удаленный сервер с использованием протокола HTTPS.
Троянская программа была успешно загружена в магазин Google Play, поскольку содержала в себе механизм отложенной активации вредоносных функций и, таким образом, не вызвала к себе подозрений со стороны инструмента Bouncer. Интересным вопросом является и то, почему Bouncer не специализируется на статическом анализе исполняемых файлов внутри загруженных приложений. По этим причинам троянская программа свободно распространялась пользователям через официальный магазин приложений Google для Android. Вредоносная игра «Super Hero adventure» была загружена в Play Store разработчиком SHSH. Вполне возможно, что этот разработчик загрузил больше приложений в магазин Play. В конечном счете, все они были удалены из магазина, но оставались незамеченными там в течение полутора лет. Возможно, что подобные случаи стали причиной того, что в марте 2015 г. Google объявила о том, что все приложения и обновления должны проходить проверку со стороны человека.
Лучшей практикой для поддержания своего устройства в безопасности является использование только официального магазина приложений для их загрузки. Кроме этого, необходимо уделять внимание отзывам и комментариям пользователей к размещаемым там приложениям. При установке приложения следует внимательно следить за запрашиваемыми приложением правами. Если вы заметили что-либо подозрительное в поведении приложения, его можно отправить в качестве образца в антивирусную лабораторию с соответствующими комментариями о причинах отправки.
Ниже представлена информация о проанализированных нами образцах вредоносной программы.
Источник