Как узнать текущую активность Android

Обновлено: 24.09.2022

Тогда, если вы хотите получить доступ к текущему действию в любом месте вашего приложения Android, библиотеки или плагина, просто вызовите: CrossCurrentActivity. Текущий. Активность и у вас будет текущая активность.

Как проверить, запущено ли действие в Android?

Используйте переменную isActivity, чтобы проверить, активна ли активность. private ArrayList runningActivities = new ArrayList<>(); И добавьте следующие общедоступные методы для доступа и изменения этого списка.

Видна ли активность Android?

Действия видны и взаимодействуют с пользователем. Активность по-прежнему видна, но частично скрыта, экземпляр запущен, но может быть уничтожен системой. Активность не видна, экземпляр запущен, но может быть уничтожен системой. Активность была прекращена системой вызовом ее метода finish().

Как узнать, видна активность или нет?

В вашем методе finish() вы хотите использовать isActivityVisible(), чтобы проверить, видима ли активность или нет. Там вы также можете проверить, выбрал ли пользователь опцию или нет. Продолжить, когда будут выполнены оба условия.

В чем разница между контекстом и действием?

7 ответов. Оба они являются экземплярами Context, но экземпляр приложения привязан к жизненному циклу приложения, а экземпляр Activity привязан к жизненному циклу Activity. Таким образом, они имеют доступ к различной информации о среде приложения.

Что такое фоновая активность в Android?

Передний план — это активные приложения, которые потребляют данные и в настоящее время работают на мобильном устройстве. Фон относится к данным, используемым, когда приложение выполняет какую-либо деятельность в фоновом режиме, которая в данный момент не активна. Это связано с тем, что независимо от того, активны они или нет, приложения потребляют данные. Может быть.

Что такое видимое действие?

Видимый процесс выполняет работу, о которой в данный момент знает пользователь, поэтому его прекращение окажет заметное негативное влияние на взаимодействие с пользователем. … Он выполняет действие, которое видно пользователю на экране, но не на переднем плане (был вызван его метод onPause()).

Какой тип активности выполняется?

Бег – популярный вид физической активности. Примерно каждый пятый австралийец пытается бегать (или бегать трусцой) на каком-то этапе своей жизни. Бег — это привлекательное упражнение, потому что оно не требует больших затрат и вы можете бегать в любое удобное для вас время.

Активен ли Android на переднем плане?

Действие или диалоговое окно отображается на переднем плане

Затем система вызывает для него метод onPause(). … Затем система в быстрой последовательности вызывает onPause() и onStop() . Когда тот же самый экземпляр рассматриваемого действия возвращается на передний план, система вызывает onRestart() , onStart() и onResume() для действия.

Как убить активность?

Запустите приложение, откройте новое действие, выполните какую-нибудь работу. Нажмите кнопку «Домой» (приложение будет в фоновом режиме, в остановленном состоянии). Убить приложение — самый простой способ — просто нажать красную кнопку «стоп» в Android Studio. Вернитесь к своему приложению (запустите из последних приложений).

Что такое жизненный цикл активности Android?

Активность – это отдельный экран в Android. … Это как окно или рамка Java. С помощью активности вы можете разместить все компоненты пользовательского интерфейса или виджеты на одном экране. Метод 7 жизненного цикла Activity описывает, как действие будет вести себя в разных состояниях.

Как происходит уничтожение активности в системе Android?

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

Что происходит с активностью при нажатии кнопки "Домой"?

Вместо этого при нажатии кнопки "Домой" приложение переходит в состояние "Остановлено", продолжая работать в фоновом режиме. … В Android есть понятие Приложения. Это приложение включает в себя процесс, в котором выполняются ваши действия, используемую ими память и любые другие классы, загружаемые в память.

В чем разница между действиями onCreate и onStart?

onCreate() вызывается при первом создании действия. onStart() вызывается, когда действие становится видимым для пользователя.

Когда в Android вызывается метод onPause?

на паузу. Вызывается, когда действие все еще частично видно, но пользователь, вероятно, полностью уходит от вашего действия (в этом случае onStop будет вызываться следующим). Например, когда пользователь нажимает кнопку "Домой", система быстро вызывает onPause и onStop в вашей Activity .


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

Контекст — это свойство, которое может дать вам контекст того, что происходит на Экране/Действии, которому он принадлежит. Он содержит информацию о том, какие представления существуют, как они расположены и т. д.

Поэтому важно знать различные типы контекста и методы, которые можно вызывать для получения контекста. Давайте начнем.

Ключевое слово this в общем смысле относится к текущему экземпляру класса. Итак, когда вы используете ключевое слово this внутри действия, оно относится к этому экземпляру действия. А поскольку действие является подклассом контекста, вы получите контекст этого действия.

Если вы не находитесь непосредственно внутри действия, например внутри OnClickListener, вы можете получить текущий контекст, указав имя действия, например MainActivity.this (Java) или this@MainActivity (Kotlin)

Этот метод можно вызывать для представления, например textView.getContext() . Это даст контекст действия, в котором в данный момент размещено представление.

Если вам нужен доступ к ресурсам, которые выходят за рамки определенного действия, например, при доступе к SharedPreferences, отображении всплывающего сообщения и т. д., вы можете использовать это.

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

Вы можете напрямую получить доступ к контексту приложения, вызвав getApplicationContext() или вызвав контекст действия, например context.getApplicationContext()

Этот метод полезен только при использовании ContextWrapper. Вы можете получить исходный контекст, который был обернут ContextWrapper, вызвав contextWrapper.getBaseContext()

(ContextWrapper это класс-оболочка, с помощью которого вы можете переопределить любой метод Context, сохраняя при этом исходный контекст)

Когда вы вызываете getContext() из фрагмента, вы получаете контекст действия, в котором размещен этот фрагмент.

Вы можете получить родительскую активность из фрагмента, вызвав getActivity() .

💡Разница : и getContext(), и getActivity() в большинстве случаев не сильно отличаются, когда вам просто нужен контекст, поскольку оба получат родительский контекст активности. За исключением некоторых случаев, например при использовании ContextWrapper, getContext() и getActivity() могут указывать на разные контексты.

Эти методы такие же, но «NotNull» версии getContext() и getActivity() соответственно. Обычно, если фрагмент отсоединен от Activity, вы получите «нулевое» значение при вызове getContext() или getActivity(). Таким образом, даже если вы уверены, что контекст не будет нулевым, вам все равно придется добавлять проверки на нуль (особенно в Kotlin), потому что они возвращают тип Nullable.

Но requireContext() и requireActivity() вызовут исключение IllegalStateException вместо возврата null, если контекст отсутствует.

Эти методы в основном полезны, когда вы используете Kotlin и вам нужен ненулевой контекст. Поэтому использование этих методов зависит от личных предпочтений.

Итак, вы узнали что-то новое? Если да, пожалуйста, похлопайте и поделитесь публикацией. 😄

В мире Android одна из самых больших проблем, с которыми я столкнулся на протяжении многих лет, заключается в том, что вам часто требуется доступ к текущей активности приложений при написании библиотек или абстрагировании общих функций. В течение многих лет я занимался решением этой проблемы, устанавливая специальные флаги Intent или, что более вероятно, создавая BaseActivity со статическим «CurrentActivity», который устанавливается при запуске страницы. Хотя это работает в краткосрочной перспективе для МОЕГО приложения, оно полностью перестает работать, когда вы хотите создавать плагины или абстрагировать API в какой-либо интерфейс.

Когда дело доходит до этого, вам просто нужна эта активность, и это должно быть легко! Вот почему я решил проблему раз и навсегда с помощью секретного скрытого API, который Google пробрался во время выпуска Ice Cream Sandwich (API 14) под названием ActivityLifecycleCallbacks. Это очень недокументировано, но из того, что Джереми и я можем собрать, Google ввел это, чтобы вы могли в любое время выяснить, что происходит в данный момент. Он должен быть реализован в ваших приложениях в классе «Приложение» и вызывать RegisterActivityLifecycleCallbacks. После этого все готово.

Итак, позвольте представить вам мой последний подключаемый модуль для Xamarin.Android под названием «CurrentActivity».


Как вы уже догадались, этот плагин делает одну вещь: позволяет получить доступ к текущей активности. На самом деле весь API — это всего лишь одно свойство:

Магия этого пакета NuGet и подключаемого модуля заключается в том, что когда вы устанавливаете их или используете в качестве зависимости в своем собственном подключаемом модуле, они создают файл «MainApplication.cs», который связывается и реализует ActivityLifecycleCallbacks. БУМ! Сделанный! Вот как это выглядит:

Затем, если вы хотите получить доступ к текущему действию в любом месте вашего приложения Android, библиотеки или плагина, просто вызовите: CrossCurrentActivity.Current.Activity, и вы получите текущее действие.

Если у вас уже есть подкласс Application, не волнуйтесь, вы можете просто скопировать и вставить код, который я поместил в текстовый файл readme в проекте, или зайдите на мой GitHub и узнайте больше!

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

НЕ ИСПОЛЬЗУЙТЕ ПРЕДЫДУЩИЙ ответ (waqas716).

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

Ваш класс приложения:

Создайте новое действие:

Теперь вместо того, чтобы расширять класс Activity для ваших действий, просто расширяйте MyBaseActivity. Теперь вы можете получить текущую активность из приложения или контекста активности следующим образом:

@lockwobr Спасибо за обновление

Это не работает в 100% случаев в версии API 16, если вы читали код на github, функция «currentActivityThread» была изменена в Kitkat, поэтому я хочу сказать, что версия 19-я, что-то трудно подобрать версия API для выпусков в github.

Очень удобно иметь доступ к текущему действию. Было бы неплохо иметь статический метод getActivity, возвращающий текущую активность без лишних вопросов?

Класс Activity очень полезен. Он дает доступ к потоку пользовательского интерфейса приложения, представлениям, ресурсам и многому другому. Многочисленные методы требуют Context, но как получить указатель? Вот несколько способов:

Просто решить с помощью отражения:

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

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

Довольно простое решение — создать класс менеджера singleton, в котором вы можете хранить ссылку на одно или несколько действий или что-то еще, к чему вы хотите получить доступ в приложении.

Вызов UberManager.getInstance().setMainActivity(активность); в основном действии onCreate.

Вызов UberManager.getInstance().getMainActivity(); в любом месте вашего приложения, чтобы получить его. (Я использую это, чтобы иметь возможность использовать Toast из потока, не связанного с пользовательским интерфейсом.)

Убедитесь, что вы добавили вызов UberManager.getInstance().cleanup(); когда ваше приложение уничтожается.

Я расширяю верхнюю часть ответа @gezdy.

В каждом действии вместо необходимости «регистрировать» себя в приложении с ручным кодированием мы можем использовать следующий API начиная с уровня 14, чтобы помочь нам достичь той же цели с меньшим количеством ручного кодирования.

В Application.ActivityLifecycleCallbacks вы можете узнать, какое действие "привязано" или "отключено" от этого приложения.

Однако этот метод доступен только начиная с уровня API 14.

Я опоздал примерно на 3 года, но я все равно отвечу, если кто-то найдет это так же, как я.

Я решил это, просто используя это:

Обратите внимание, что "getIntent().toString()" включает в себя множество других текстов, таких как имя вашего пакета и любые фильтры намерений для вашей активности. Технически мы проверяем текущее намерение, а не активность, но результат тот же. Просто используйте, например. Log.d("тест", getIntent().toString()); если вы хотите увидеть весь текст. Это решение немного хакерское, но оно намного чище в вашем коде, а функциональность такая же.

Ответ waqas716 хороший. Я создал обходной путь для конкретного случая, требующий меньше кода и обслуживания.

Я нашел обходной путь: статический метод извлекает представление из действия, которое, как я подозреваю, находится на переднем плане. Вы можете перебрать все действия и проверить, хотите ли вы, или получить название действия из ответа мартина

.

Затем я проверяю, не является ли представление нулевым, и получаю контекст с помощью getContext().

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

класс ReactContext в ReactNative имеет весь набор логики для поддержки mCurrentActivity, который возвращается в getCurrentActivity().

Примечание. Я бы хотел, чтобы getCurrentActivity() был реализован в классе приложения Android.

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