Context service на андроиде что это за программа

Обновлено: 07.07.2024

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

If you read the docs at getApplicationContext it notes that you should only use this if you need a context whose lifecycle is separate from the current context.

But in general, use the activity context unless you have a good reason not to.

Need of Context :

The documentation says that every view needs the context to access the right resources (eg the theme, strings etc.).

But why in the constructor and not through setContentView(View)?

1.Because the resources must be accessible while the view is being constructed (the constructor will need some resources to fully initialise the view).

2.This allows the flexibility of using a context that is different from the one of the current activity (imagine a view that uses some other string resources and not the ones from the current activity).

3.The designers of the Android SDK seem to have chosen that the context must be set only once and then stay the same throughout the lifetime of the view. Why context is not determined automatically at construction point?

1.Because there exists no static variable that would tell you the current global context of your application. The method getApplicationContext() is the closest to this, but it's not static, so you need an instance of the Activity object to call it.

2.The Java language provides an option to look through the call stack and find whether the View has been constructed in a Context class. But what if there are many? Or what if there are none? This method is very expensive and error prone. So the designers of the API decided that a context must be manually provided.

Putting simple, Androids Context is a mess that you won't love until you stop worrying about.

Thing that you want to pass around all your application when you are starting developing for Android, but will avoid doing it when you get a little bit closer to programming, testing and Android itself.

Common source of memory leaks.

PITA for testing.

Actual context used by Android system to dispatch permissions, resources, preferences, services, broadcasts, styles, showing dialogs and inflating layout. And you need different Context instances for some separate things (obviously, you can't show a dialog from an application or service context; layouts inflated from application and activity contexts may differ).

Context in Android is an interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

This attribute declares which activity this layout is associated with by default .

In Java, we say " this " keyword refers to the state of the current object of the application. Similarly, in an alternate we have Context in android development.

Однажды я с огромным удивлением для себя обнаружил, что современная молодёжь плохо шарит в компах. Как так-то? Размышляя об этом я пришёл к выводу, что поколение шарит в том, что плохо работает, постоянно ломается и нужно чинить. Например, родители моего поколения хорошо шарят в механике и электричестве - они постоянно с этим имели дело, что-то чинили (мото, авто, радио и т.п.) и это был хайп того времени. С современными компами всё просто (относительно моего времени) - нашёл винду на торренте, залил на флешку, настроил загрузку в биосе, десять раз кликнул “далее” и на следующие 4-10 лет можно забыть об этом. Новые версии андроида и софта под него работают ещё более надёжно.

Поэтому у моего поколения не было выбора и приходилось хорошо шарить в компах. Хочешь быструю винду - лезь внутрь и мозгуй, экспериментируй. Например, чистая винда-98 второй версии занимала около 220 МБ и лично я удалял из неё около 110 МБ, после чего она работала существенно быстрее. Конечно, я не абсолютизирую - и сейчас есть куча знающих людей, и тогда была куча незнающих. Но сейчас доля знающих, имхо, меньше, так как компы работают как часы и у людей меньше необходимости и мотивации туда лезть. Собственно, я к чему: когда мой смартфон начал работать совсем медленно и быстро жрать батарею я знал что буду делать =)

Все нижеописанные операции с лёгкостью могут превратить ваш смартфон в кирпич! 100 раз подумайте и изучите нюансы, прежде чем что-то делать. И всё забекапить, да.

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

Для начала я досконально посмотрел на оперативу, что до рута было мне недоступно: оказалось, что в ней сидит куча хлама, который я использую раз в год и закрываю сразу после использования. Даже если закрыть принудительно процесс в оперативе, то он всё равно скоро сам запустится. Причём это не какой-нить индийский говнософт. Ща уже забылось, но помню яндекс-карты жрали около 50 МБ оперативы. Для масштаба: после загрузки смарта доступны около 500 МБ. И я могу их понять: каждая прога хочет сидеть в оперативе, чтобы быстро запускаться и всякие свои служебные дела делать. Если прога позаботится о пользователе и будет выгружать себя из оперативы, то высок риск что пользователь сменит её на другую, которая быстро запускается, так как сидит в оперативе. А то, что именно из-за неё тормозит смарт пользователь не узнает, ведь таких прог в оперативе множество. Поэтому разработчики вынуждены жертвовать быстродействием смартфона.

К счастью, в андроид есть удобный механизм на этот случай: прогу можно заморозить и она не будет жрать ни проц, ни оперативу. Поэтому я первым делом заморозил проги, которые редко юзаю - проще раз в год залезть в меню и разморозить при необходимости, чем иметь постоянно забитую оперативу и тупящие проги. Лично я замораживал с помощью Titanium Backup, мб есть способы проще. Смарт стал отзывчивее, но недостаточно.

Помимо неприязни к софту, который нельзя выгрузить из оперативы закрыв его, у меня неприязнь ко всякому хламу, который достался моему андроиду от производителя - я говорю о гугле. Его сервисы занимали около 150-200 МБ в оперативе и нахер мне не сдались - заблокировал всё к чертям (в том числе гугл плей). Также от производителя досталась и самсунговская оболочка: куча ненужных и незнакомых мне приложений. Заблокировав всё я столкнулся с тем, что не работает ряд меню и кнопок - они висят на самсунговском лаунчере. Относительный кирпич был близок и я всё самсунговское постарался как можно быстрее вернуть. Погуглив я решил поставить что-то максимально минималистичное и простое, а именно лаунчер от гугла. В помойку повторно отправилось всё самсунговское кроме клавиатуры.

На моём смарте около 280 процессов. Думаю, около 100 я на тот момент уже заблокировал. Если посмотреть на названия остальных работающих процессов, то можно увидеть, что присутствует куча ненужного (или редкоиспользуемого) многим хлама. Процессы для bluetooth, VPN, сетевых служб, заставок экрана, фона рабочего стола, шрифтов, принтеров, системных настроек. Заблокировав много чего из перечисленного у меня перестал работать инет и звонки. Пришлось что-то возвращать обратно и блокировать внимательнее. Назначение процессов можно было понять из названий, значков и при помощи гугла.

В итоге, из 286 процессов сейчас заблокировано 216. И всего 70 работают. Куча свободной оперативы, смарт летает 1,5 - 2 дня вместо одного, могу открыть кучу страниц в браузере и приложений и ядро андроида не очистит их из оперативы из-за нехватки памяти. Как всегда бывает, помимо плюсов я приобрёл минусы. Перечислю:

1. Некоторые приложения при запуске ругаются на отсутствие некоторых гугловских сервисов, но работать ни им, ни мне это не мешает.

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

3. Не работают приложения Google sheets и Google docs (требуется вагон процессов). Для меня это не большая, но заметная проблема. Поэтому когда приспичит (раз в два месяца), я их использую из браузера.

4. Я заблокировал даже те приложения, которые использую раз в неделю. Соответственно, пару раз в неделю я лезу в Titanium Backup и разблокирую их. На это уходит около 5-10 секунд, но выигрыш от свободной оперативы гораздо больше.

5. Сейчас я уже не боюсь кирпича, но когда я так же экспериментировал со вторым смартом я словил ситуацию, когда он вис спустя 10 секунд после перезагрузки. С N-ой попытки я успел в этот интервал включить Titanium Backup и разблокировал всё. Если бы он вис спустя 5 секунд, то хрен бы я успел и хз что с ним делать. Наверно, есть какие-то решения, но неприятный гимор. А возможно и фатальный. Такие случаи в гугле есть. Возможны ещё более простые ситуации - можно заблокировать что-то системное случайно, пока смарт в кармане.

Бонусом список процессов. Жирным - работающие, обычным - заблокированные. Оболочка самсунга заменена и перенастроена на Google Now. Не пытайтесь повторить точь-в-точь мой список - высок риск словить какой-нить жёсткий косяк.

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


Оповещение «к сожалению, Context Service остановлено на Samsung Galaxy». О том, что это такое спрашивают пользователи сети. Причина возникновения — работа с приложениями, и, используемым софтом.

Для корректной работы используют:
Перезапуск. Применим, если проблема проявляется при работе с софтом, а не сторонними программами.

Нужно удалить софт, а потом — начать установку. после, следует удостовериться в том, что удалось ли избавиться от ошибки.

Удалить. Иногда ПО не поддерживаются, и, как вариант решения — удаление. Избавиться от ошибки, которая провоцируется софтом.

Очищение кэша. Файлы — источники ошибок и проблем, возникающих в ПО. Решаются проблемы, связанные с приложением. Для выполнения процесса, потребуется:

Чистка оперативной памяти

Профилактика возникновения ошибок. Работа программного софта — в фоновом режиме, применяется значительный объем памяти устройства. Из-за этого засоряется существенное количество оперативной памяти. Ввиду этого и возникает некорректная работа. Алгоритм решения проблемы: «Диспетчер задач» —«Очистка памяти».


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

Есть возможность переброса информации на ПК — на это уйдет минимум времени.

в программировании Android, что именно является Context класс и для чего он используется?

Я читал об этом на сайте разработчика, но я не могу это четко понимать.

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

вы можете получить контекст, вызывая getApplicationContext() , getContext() , getBaseContext() или this (когда в классе, который простирается от Context , как применение, деятельность, обслуживание и IntentService классы).

типичное использование контекста:

создание новых объектов: Создание новых представлений, адаптеров, прослушивателей:

доступ к стандартным общим ресурсам: Услуги LAYOUT_INFLATER_SERVICE, SharedPreferences:

неявный доступ к компонентам: Что касается контент-провайдеров, трансляций, намерение!--9-->

определение контекста ::

  • контекст представляет данные среды
  • он обеспечивает доступ к таким вещам, как базы данных

более простые термины::

рассмотрим Person-X является генеральным директором начинающей компании программного обеспечения.

в компании присутствует ведущий архитектор, этот ведущий архитектор делает всю работу в компании которая включает такие как база данных, UI так далее.

теперь генеральный директор нанимает нового разработчика.

это архитектор, который говорит ответственность вновь нанятых человек, основанный на навыках нового человека, что ли он будет работа над базой данных или UI и т. д.

более простые термины::

это как доступ активности android к ресурсу приложения.

это похоже на то, когда вы посетите отель, вы хотите завтрак, обед & ужин в подходящее время, верно?

есть много других вещей, которые вам нравятся во время пребывания. Как вы получили эти вещи?

вы попросите человека обслуживания номеров принести эти вещи для вас.

вот номер человека в контексте вы одиночная деятельность и отель, чтобы быть вашим приложением, наконец, завтрак, обед & ужин быть ресурсами.

вещи, которые включают контекст:

  1. загрузки ресурса.
  2. запуск нового вида деятельности.
  3. создание представлений.
  4. получение системы обслуживания.

контекст является базовым классом для активность, сервис, приложение . и т. д.

другой способ описать это: рассмотрите контекст как удаленный от телевизора и канала в телевизоре-это ресурсы, услуги, использование намерений и т. д. - - - Здесь удаленный действует как доступ, чтобы получить доступ ко всем различным ресурсам на переднем плане.

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

разные методы, с помощью которых вы можете получить контекст

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • или this (когда в классе activity)

this -> относится к контексту текущая деятельность.

тема контекста в Android кажется запутанной для многих. Люди просто знают, что контекст необходим довольно часто, чтобы делать основные вещи в Android. Люди иногда паникуют, потому что они пытаются выполнить какую-то операцию, которая требует контекста, и они не знают, как "получить" правильный контекст. Я попытаюсь прояснить идею контекста в Android. Полное рассмотрение этого вопроса выходит за рамки этого поста, но я постараюсь дать общий обзор, чтобы у вас было представление о том, что такое контекст и как его использовать. Чтобы понять, что такое контекст, давайте посмотрим на исходный код:

что такое контекст?

Ну, сама документация дает довольно простое объяснение: класс контекста является " интерфейсом для глобальная информация о среде применения".

сам класс контекста объявляется как абстрактный класс, реализация которого обеспечивается ОС Android. В документации далее предусматривается, что контекст ". обеспечивает доступ к ресурсам и классам конкретных приложений, а также к вызовам для операций на уровне приложений, таких как запуск мероприятий, вещание и получение намерений и т. д.".

теперь вы можете очень хорошо понять, почему имя является контекстом. Потому что так оно и есть. Контекст предоставляет ссылку или крючок, если хотите, для действия, службы или любого другого компонента, тем самым связывая его с системой, обеспечивая доступ к глобальной среде приложений. Другими словами: контекст дает ответ на вопрос компонентов "где, черт возьми, я по отношению к приложению в целом и как я могу получить доступ/общаться с остальной частью приложения?"Если все это кажется немного запутанным, быстрый взгляд на методы, предоставляемые контексте класс дает некоторые дополнительные подсказки о его истинной природе.

вот случайная выборка этих методов:

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

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

контекст, другими словами, крючки компонент, который имеет ссылку на него для остальной среды приложения. Активы (например, папка "/assets " в вашем проекте) доступны в приложении при условии, что действие, служба или что-либо еще знает, как получить доступ к этим ресурсам. То же самое касается getResources() , которая позволяет делать такие вещи, как getResources().getColor() который зацепит вас в colors.xml resource (неважно, что aapt обеспечивает доступ к ресурсам через java-код, это отдельная проблема).

результат это Context это то, что позволяет получить доступ к системным ресурсам и его, что подключает компоненты в "большее приложение". Давайте рассмотрим подклассы Context классы, которые обеспечивают реализацию абстрактного Context класса. Наиболее очевидным классом является Activity класса. Activity наследует от ContextThemeWrapper , который наследует от ContextWrapper , который наследует от . Эти классы полезны для изучения, чтобы понять вещи на более глубоком уровне, но на данный момент достаточно знай это ContextThemeWrapper и ContextWrapper в значительной степени то,что они звучат. Они реализуют абстрактные элементы Context сам класс путем "обертывания" контекста (фактического контекста) и делегирования этих функций этому контексту. Пример полезен - в ContextWrapper класс, абстрактный метод getAssets С Context класс реализован следующим образом:

mBase - это просто поле, заданное конструктором в определенном контексте. Таким образом, контекст обернут и ContextWrapper делегирует свою реализацию метода getAssets в этот контекст. Давайте вернемся к изучению Activity класс, который в конечном счете наследуется от Context чтобы увидеть, как это все работает.

вы, вероятно, знаете, что такое активность, но для обзора - это в основном " одна вещь, которую пользователь может сделать. Он заботится о предоставлении окна, в котором разместить пользовательский интерфейс, с которым пользователь взаимодействует". Разработчики, знакомые с другими API и даже не разработчики могут думать об этом vernacularly в качестве "экрана.- Технически это неточно, но для наших целей это не имеет значения. Так как Activity и Context взаимодействовать и что именно происходит в их отношениях наследования?

опять же, полезно посмотреть на конкретные примеры. Мы все знаем, как начать деятельность. Если у вас есть "контекст", из которого вы начинаете действие, вы просто вызываете startActivity(intent) , где намерение описывает контекст, из которого вы начинаете действие и деятельность, которую вы хотели бы начать. Это знакомый startActivity(this, SomeOtherActivity.class) .

и что такое this ? this это ваша деятельность, потому что Activity класс наследует от Context . Полный совок выглядит так: Когда вы звоните startActivity , в конечном счете Activity класс выполняет что-то вроде этого:

таким образом, он использует execStartActivity С Instrumentation класс (на самом деле из внутреннего класса в Instrumentation под названием ActivityResult ).

на данный момент, мы начинаю заглядывать внутрь системы.

здесь OS фактически обрабатывает все. Итак, как именно инструментарий начинает работу? Ну, парам this на execStartActivity метод выше-это ваша деятельность, то есть контекст, и execStartActivity использует этот контекст.

обзор 30,000 таков: класс Instrumentation отслеживает список действий, которые он отслеживает, чтобы выполнить свою работу. Этот список используется для координации все действия и убедитесь, что все работает гладко в управлении потоком деятельности.

есть некоторые операции, которые я не полностью изучил, какие проблемы с координацией потока и процесса. В конечном счете, ActivityResult использует собственную операцию - ActivityManagerNative.getDefault().startActivity() использует Context что вы прошли, когда вы позвонили startActivity . Контекст, который вы передали, используется для помощи в "разрешении намерений", если это необходимо. Разрешение намерений-это процесс, с помощью которого система может определить цель намерения, если она не указана. (Проверьте здесь для более подробной информации).

и для того, чтобы Android сделать это, ему нужен доступ к информации, которая поставляется Context . В частности, система должна получить доступ к ContentResolver таким образом, он может "определить тип MIME данных намерения". Это все о том, как startActivity использование контекста было немного сложным, и я сам не полностью понимаю внутренние органы. Моя главная мысль заключалась в том, чтобы проиллюстрировать, как для выполнения многих операций, необходимых для приложения, необходимо получить доступ к ресурсам всего приложения. Context это то, что обеспечивает доступ к этим ресурсам. Более простым примером могут быть представления. Мы все знаем, что вы создаете пользовательский вид, расширяя RelativeLayout или какой-то другой View class, вы должны предоставить конструктор, который принимает Context в качестве аргумента. Когда вы создаете свой пользовательский вид, вы передаете его в контексте. Почему? Потому что представление должно иметь доступ к темы, ресурсы и другие сведения о конфигурации представления. Конфигурация View - отличный пример. Каждый контекст имеет различные параметры (поля Context реализации), которые устанавливаются самой ОС для таких вещей, как размер или плотность дисплея. Легко понять, почему эта информация важна для настройки представлений и т. д.

последнее слово: По какой-то причине люди, новые для Android (и даже не такие новые), похоже, полностью забывают о объектно-ориентированное программирование, когда дело доходит до Android. По какой-то причине люди пытаются склонить свою разработку Android к заранее задуманным парадигмам или изученному поведению.

Android имеет свою собственную парадигму и определенный шаблон, который на самом деле довольно последователен, если отпустить ваши заранее задуманные понятия и просто прочитать документацию и руководство dev. Моя реальная точка зрения, однако, в то время как "получение правильного контекста" иногда может быть сложным, люди неоправданно паникуют, потому что они сталкиваются с ситуация, когда они нуждаются в контексте и думают, что у них его нет. Опять же, Java-это объектно-ориентированный язык с дизайном наследования.

у вас только "есть" контекст внутри вашей деятельности, потому что ваша деятельность сама наследуется от контекста. В этом нет магии (за исключением всего того, что ОС делает сама по себе, чтобы установить различные параметры и правильно "настроить" ваш контекст). Таким образом, откладывая проблемы с памятью/производительностью (например, удерживая ссылки на контекст, когда вам не нужно или делать это таким образом, который имеет негативные последствия для памяти и т. д.), контекст-это объект, как и любой другой, и его можно передавать так же, как любой POJO (простой старый объект Java). Иногда вам может потребоваться сделать умные вещи, чтобы получить этот контекст, но любой обычный класс Java, который простирается ни от чего другого, кроме самого объекта, может быть написан таким образом, что имеет доступ к контексту; просто выставьте открытый метод, который принимает контекст, а затем используйте его в этом классе по мере необходимости. Это было не предназначен для исчерпывающего лечения контекста или внутренних Android, но я надеюсь, что это поможет в демистификации контекста немного.

Читайте также: