- Как перезапустить Android-активность
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Остановка и перезапуск Activity
- В этом уроке
- Вы также должны прочитать
- Попробуйте
- Остановка вашей activity
- Как перезапустить активность Android
- 18 ответов
- Как перезапустить Android-активность
Как перезапустить Android-активность
Как перезагрузить Android Activity ? Я попробовал следующее, но Activity просто уходит.
ОТВЕТЫ
Ответ 1
Я сделал свой видеомикшер следующим образом:
В принципе, я звоню finish() во-первых, и я использую то же самое намерение, с которого была начата эта деятельность. Это похоже на трюк?
ОБНОВЛЕНИЕ: Как было указано Ральфом ниже, Activity.recreate() — это путь в API 11 и далее. Это предпочтительнее, если вы находитесь в среде API11+. Вы по-прежнему можете проверить текущую версию и вызвать фрагмент кода выше, если вы используете API 10 или ниже. (Пожалуйста, не забудьте упрекнуть Ральфа!)
Ответ 2
Начиная с уровня API 11 (Honeycomb), вы можете вызвать recreate() метод активности (благодаря этот ответ.)
Метод recreate() действует так же, как изменение конфигурации, поэтому также вызывают методы onSaveInstanceState() и onRestoreInstanceState().
Ответ 3
Перед SDK 11 способ сделать это выглядит так:
Ответ 4
Просто, чтобы совместить ответы Ральфа и Бена (включая изменения, сделанные в комментариях):
Ответ 5
Я использовал этот код, чтобы поддерживать старые версии Android и использовать recreate() для новых версий Android.
Ответ 6
Это решение сработало для меня.
Сначала завершите действие, а затем запустите его снова.
Ответ 7
Это самый простой способ перезапустить текущую активность:
Ответ 8
Вызвать этот метод
Ответ 9
Даже если на это ответили несколько раз.
Если перезагрузка активности из фрагмента, я бы сделал это следующим образом:
Значит, вы думаете, что это немного переборщило? Но проводка Handler позволяет вам вызвать это в методе жизненного цикла. Я использовал это в методах onRestart / onResume при проверке, изменилось ли состояние между пользователем, возвращающимся в приложение. (установлено что-то).
Без Handler , если вы вызываете его в нечетном месте, он просто убьет действие и не перезапустит его.
Не стесняйтесь задавать любые вопросы.
Ответ 10
Ну, это не список, а комбо некоторых, которые уже отправлены:
Ответ 11
Фактически для уровней API 5 и выше действует следующий код, поэтому, если ваш целевой API ниже этого, вы получите нечто очень похожее на код EboMike.
Ответ 12
попробуйте использовать это.
Ответ 13
Существует один хакерский способ, который должен работать над любой деятельностью, включая основную.
При изменении ориентации Android обычно воссоздает вашу активность (если вы не отмените ее). Этот метод полезен для поворотов на 180 градусов, когда Android не воссоздает вашу активность.
Ответ 14
В сочетании с странным поведением SurfaceView жизненного цикла с камерой. Я обнаружил, что recreate() не очень хорошо работает с жизненным циклом SurfaceViews. surfaceDestroyed никогда не называется во время цикла отдыха. Он вызывается после onResume (странный), после чего мой SurfaceView уничтожается.
Исходный способ воссоздания действия отлично работает.
Я не могу точно понять, почему это так, но это просто наблюдение, которое, как мы надеемся, будет направлять других в будущем, потому что оно исправило мои проблемы с SurfaceViews
Ответ 15
Решение для вашего вопроса:
Вам нужно включить в контекст активности, чтобы начать новую деятельность, а также завершить текущую деятельность.
Надеюсь, что это поможет. и работает для меня.
Ответ 16
Если вы удалите последнюю строку, вы создадите новую act Activity, но ваш старый экземпляр все равно будет жив.
Вам нужно перезапустить Activity, как при изменении ориентации (т.е. ваше состояние сохраняется и передается на onCreate(Bundle) )?
Если вы этого не сделаете, одним из возможных способов решения проблемы будет использование одной дополнительной фиктивной операции, которая будет запущена из первого действия, и какая задача — запустить новый экземпляр. Или просто задержать вызов act.finish() , после запуска нового.
Если вам нужно сохранить большую часть состояния, вы попадаете в довольно глубокие воды, потому что это нетривиально, чтобы передать все свойства вашего состояния, особенно без утечки старого Контекста/Действия, передав его новому экземпляр.
Пожалуйста, укажите, что вы пытаетесь сделать.
Ответ 17
Я удивляюсь, почему никто не упомянул Intent.makeRestartActivityTask() , который точно делает именно эту цель.
Создайте намерение, которое можно использовать для повторного запуска задачи приложения * в своем базовом состоянии.
Этот метод устанавливает Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK в качестве флагов по умолчанию.
Ответ 18
Вы можете просто использовать
метод следующим образом
и вызовите onRestart(), где вы хотите перезапустить текущую активность
Ответ 19
Это способ, которым я делаю это.
Ответ 20
Если вы вызываете какой-то фрагмент, то делайте ниже кода.
Ответ 21
Вызвать метод onCreate. Например onCreate(null);
Источник
Остановка и перезапуск Activity
В этом уроке
Вы также должны прочитать
Попробуйте
Правильная остановка и перезапуск вашей activity является важным процессом жизненного цикла activity , который дает пользователям чувство, что ваше приложение всегда живое и не теряет их прогресс. Есть несколько ключевых сценариев, в которых ваша activity останавливается и перезапускается:
- Пользователь открывает окно Недавние приложения и переключается с вашего приложения на другое приложение. activity вашего приложения, находящаяся в это время на переднем плане, останавливается. Если пользователь возвращается в ваше приложении с помощью значка запуска главного экрана или окна Недавние приложения, activity перезагружается.
- Пользователь выполняет действие в вашем приложении, которое начинается новую activity . Текущая activity будет остановлена, когда вторая activity будет создана. Если пользователь затем нажимает кнопку Назад , первая activity перезапустится.
- Пользователь получает телефонный звонок во время использования приложения на его или ее телефоне.
Activity класс предоставляет два метода жизненного цикла, onStop() и onRestart() , которые позволяют специально обрабатывать то, как ваша activity будет останавливаться и перезапускаться. В отличие от состояния приостановки, которое означает частичное перекрытие элементов пользовательского интерфейса, состояние остановки vгарантирует, что пользовательский интерфейс больше не виден и фокус пользователя находится в другой activity (или совершенно другом приложении).
Примечание: Поскольку система удерживает ваш Activity экземпляр в системной памяти, когда он остановлен, вполне возможно, что вам не нужно реализовывать onStop() и onRestart() (или даже onStart() методы вообще. Для большинства activity , которые относительно простые, activity будет остановлена и перезапущена вполне нормально, и вы, возможно, должны использовать только onPause() для приостановки текущих действий и отсоединения от системных ресурсов.
Рисунок 1. Когда пользователь покидает вашу activity , система вызывает onStop() для прекращения activity (1). Если пользователь возвращается по время остановки activity , система вызывает onRestart() (2), а затем быстро onStart() (3) и onResume() (4). Обратите внимание, что независимо от того, какой сценарий вызывает остановку activity , система всегда вызывает onPause() перед вызовом onStop() .
Остановка вашей activity
Когда ваша activity получает вызов onStop() метода, уже ничего не видно и вы должны освободить почти все ресурсы, которые не нужны, пока пользователь их не использует. После того, как ваша activity прекращается, система может уничтожить экземпляр, если это необходимо для восстановления системной памяти. В крайних случаях, система может просто убить ваш процесс приложения без вызова финального onDestroy() метода обратного вызова, поэтому очень важно использовать onStop() для освобождения ресурсов, которые могли бы привести к утечке памяти.
Несмотря на то, что onPause() метод вызывается до onStop() , вы должны использовать onStop() для выполнения более крупных и ресурсоемких операций завершения, таких как запись информации в базу данных.
Например, вот реализация onStop() , который сохраняет содержимое черновика записки в постоянное хранилище:
Источник
Как перезапустить активность Android
Как перезагрузить Android Activity ? Я попробовал следующее, но Activity просто уходит.
18 ответов
Я сделал свой видеомикшер следующим образом:
В принципе, я звоню finish() во-первых, и я использую то же самое намерение, с которого была начата эта деятельность. Это похоже на трюк?
ОБНОВЛЕНИЕ: Как было указано Ральфом ниже, Activity.recreate() — это путь в API 11 и далее. Это предпочтительнее, если вы находитесь в среде API11+. Вы по-прежнему можете проверить текущую версию и вызвать фрагмент кода выше, если вы используете API 10 или ниже. (Пожалуйста, не забудьте упрекнуть Ральфа!)
Начиная с уровня API 11 (Honeycomb), вы можете вызвать recreate() метод активности (благодаря этот ответ.)
Метод recreate() действует так же, как изменение конфигурации, поэтому также вызывают методы onSaveInstanceState() и onRestoreInstanceState().
Перед SDK 11 способ сделать это выглядит так:
Просто, чтобы совместить ответы Ральфа и Бена (включая изменения, сделанные в комментариях):
Это решение сработало для меня.
Сначала завершите действие, а затем запустите его снова.
Я использовал этот код, чтобы поддерживать старые версии Android и использовать recreate() для новых версий Android.
Вызвать этот метод
Это самый простой способ перезапустить текущую активность:
Даже если на это ответили несколько раз.
Если перезагрузка активности из фрагмента, я бы сделал это следующим образом:
Значит, вы думаете, что это немного переборщило? Но проводка Handler позволяет вам вызвать это в методе жизненного цикла. Я использовал это в методах onRestart / onResume при проверке, изменилось ли состояние между пользователем, возвращающимся в приложение. (установлено что-то).
Без Handler , если вы вызываете его в нечетном месте, он просто убьет действие и не перезапустит его.
Не стесняйтесь задавать любые вопросы.
Ну, это не список, а комбо некоторых, которые уже отправлены:
В сочетании с странным поведением SurfaceView жизненного цикла с камерой. Я обнаружил, что recreate() не очень хорошо работает с жизненным циклом SurfaceViews. surfaceDestroyed никогда не называется во время цикла отдыха. Он вызывается после onResume (странный), после чего мой SurfaceView уничтожается.
Исходный способ воссоздания действия отлично работает.
Я не могу точно понять, почему это так, но это просто наблюдение, которое, как мы надеемся, будет направлять других в будущем, потому что оно исправило мои проблемы с SurfaceViews
Существует один хакерский способ, который должен работать над любой деятельностью, включая основную.
При изменении ориентации Android обычно воссоздает вашу активность (если вы не отмените ее). Этот метод полезен для поворотов на 180 градусов, когда Android не воссоздает вашу активность.
попробуйте использовать это.
Фактически для уровней API 5 и выше действует следующий код, поэтому, если ваш целевой API ниже этого, вы получите нечто очень похожее на код EboMike.
Решение для вашего вопроса:
Вам нужно включить в контекст активности, чтобы начать новую деятельность, а также завершить текущую деятельность.
Надеюсь, что это поможет. и работает для меня.
Если вы удалите последнюю строку, вы создадите новую act Activity, но ваш старый экземпляр все равно будет жив.
Вам нужно перезапустить Activity, как при изменении ориентации (т.е. ваше состояние сохраняется и передается на onCreate(Bundle) )?
Если вы этого не сделаете, одним из возможных способов решения проблемы будет использование одной дополнительной фиктивной операции, которая будет запущена из первого действия, и какая задача — запустить новый экземпляр. Или просто задержать вызов act.finish() , после запуска нового.
Если вам нужно сохранить большую часть состояния, вы попадаете в довольно глубокие воды, потому что это нетривиально, чтобы передать все свойства вашего состояния, особенно без утечки старого Контекста/Действия, передав его новому экземпляр.
Пожалуйста, укажите, что вы пытаетесь сделать.
Источник
Как перезапустить Android-активность
Как перезапустить Android- Activity ? Я попробовал следующее, но Activity просто уходит.
Я сделал свой видеомикшер следующим образом:
В принципе, я сначала вызываю finish() , и я использую то же самое намерение, с которого была начата эта деятельность. Кажется, это трюк?
ОБНОВЛЕНИЕ: Как указано Ральфом ниже, Activity.recreate() – это путь в API 11 и далее. Это предпочтительнее, если вы находитесь в среде API11 +. Вы можете проверить текущую версию и вызывать фрагмент кода выше, если вы используете API 10 или ниже. (Пожалуйста, не забудьте оставить ответ Ральфа!)
Начиная с уровня API 11 (Honeycomb), вы можете вызвать метод recreate () активности (благодаря этому ответу).
Метод recreate () действует так же, как изменение конфигурации, поэтому также вызывают методы onSaveInstanceState () и onRestoreInstanceState (), если это применимо.
Перед SDK 11 способ сделать это выглядит так:
Просто чтобы совместить ответы Ральфа и Бена (включая изменения, сделанные в комментариях):
Это решение сработало для меня.
Сначала закончите операцию, а затем запустите ее снова.
Вызовите этот метод
Даже если на это ответили несколько раз.
Если перезапустить активность из фрагмента, я бы сделал так:
Значит, вы думаете, что это немного переборщило? Но проводка Handler позволяет вам вызвать это в методе жизненного цикла. Я использовал это в onRestart / onResume при проверке, изменилось ли состояние между пользователем, возвращающимся в приложение. (Что-то установил).
Без Handler если вы вызываете его в нечетном месте, он просто убьет действие и не перезапустит его.
Не стесняйтесь задавать любые вопросы.
Я использовал этот код, чтобы до сих пор поддерживать старые версии Android и использовать recreate() для новых версий Android.
Ну, это не список, а комбо некоторых, которые уже опубликованы:
Это самый простой способ перезапустить текущую деятельность:
На самом деле, следующий код действителен для уровней API 5 и выше, поэтому, если ваш целевой API ниже этого, вы получите нечто очень похожее на код EboMike.
Существует один хакерский подход, который должен работать над любой деятельностью, включая основную.
Когда изменения ориентации, Android обычно воссоздает вашу деятельность (если вы не переопределите ее). Этот метод полезен для поворотов на 180 градусов, когда Android не воссоздает вашу активность.
Попытайтесь использовать это ..
В сочетании со странным поведением SurfaceView LifeCycle с камерой . Я обнаружил, что recreate () не очень хорошо работает с жизненным циклом SurfaceViews. SurfaceDestroyed никогда не называется во время цикла отдыха. Он вызывается после onResume (странно), после чего мой SurfaceView уничтожается.
Исходный способ воссоздания деятельности отлично работает.
Я не могу точно понять, почему это так, но это просто наблюдение, которое, как мы надеемся, будет направлять других в будущем, поскольку оно устраняет мои проблемы с SurfaceViews
Если вы удалите последнюю строку, вы создадите новую act Activity, но ваш старый экземпляр останется в живых.
Вам нужно перезапустить Activity, как при изменении ориентации (т.е. ваше состояние сохраняется и передается в onCreate(Bundle) )?
Если вы этого не сделаете, одним из возможных способов решения проблемы будет использование одной дополнительной фиктивной операции, которая будет запущена из первого действия, и какая задача – запустить новый экземпляр. Или просто задерживайте вызов act.finish() после запуска нового.
Если вам нужно сохранить большую часть состояния, вы попадаете в довольно глубокие воды, потому что нетривиально передавать все свойства вашего состояния, особенно без утечки старого контекста / действия, передавая его новому экземпляру.
Пожалуйста, укажите, что вы пытаетесь сделать.
Решение по вашему вопросу:
Чтобы начать новую деятельность, необходимо включить в контекст активности, а также завершить текущую деятельность.
Надеюсь, это полезно .. и работает для меня.
Если вы вызываете какой-то фрагмент, то делайте ниже кода.
Вызовите метод onCreate. Например onCreate(null);
Источник