Как я могу знать, что OnResume приходит после onCreate?
У меня мало действий, и из одного действия я открываю другое, и это возвращается к первому...
точка onCreate называется ones, и onResume каждый раз, когда активность отображается. Например, когда я закрываю B, который был ранее запущен из A, onResume вызывается, но не onCreate....
моя проблема в том, что я не хочу запускать onResume, если он приходит после onCreate, я хочу запустить код, только если onCreate не был вызван
Is это можно сделать без статического флага ?
есть ли какой-то метод или флаг от android, как comesAfterOnCreate ?
@Override
protected void onResume() {
if(comesAfterOnCreate){
//DO not run this code
}else{
//run the long task
}
Я показываю много ответов с раствором, используя статический флаг, спасибо всем вам за усилия и предлагая помощь, но мне было интересно, есть ли какой-то метод или что-то...
6 ответов
это не сложная работа, вы можете использовать boolean
или посмотреть здесь можно ли проверить, был ли onCreate вызван из-за изменения ориентации?
попробуйте это,
boolean flag = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
flag = true;
....
}
@Override
protected void onResume() {
super.onResume();
if(flag == true){
..... // it has came from onCreate()
}
else{
.....// it has directly came to onResume()
}
}
теперь, когда Acitivity завершит значение флага снова будет false и onResume()
будет вызываться со значением false.
надеюсь, это сработает для вас.
Так как в моем комментарии:
private boolean onCreateRunned = false;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
onCreateRunned = true;
//More code
}
@Override
public void onResume(){
super.onResume();
if(onCreateRunned){
onCreateRunned = false; //important, or it will run only once.
// Do your code
}
}
Как показано в Активность-Документация Для Android.
активность имеет по существу четыре состояния:
1. если активность на переднем плане экрана (в верхней части стека), она активна или работает.
2. если действие потеряло фокус, но все еще видно (то есть новое не-полноразмерное или прозрачное действие имеет фокус поверх вашей деятельности), оно приостанавливается. Приостановленную деятельность полностью жива (он поддерживает всю информацию о состоянии и членах и остается прикрепленным к оконному менеджеру), но может быть убит системой в экстремально низких ситуациях памяти.
3. если деятельность полностью затемнена другой деятельностью, она прекращается. Он по-прежнему сохраняет всю информацию о состоянии и членах, однако он больше не виден пользователю, поэтому его окно скрыто, и он часто будет убит системой, когда память нужна в другом месте.
4. Если действие приостановлено или остановлено, система может удалить его из памяти, либо попросив завершить, либо просто убив процесс. Когда он снова отображается пользователю, он должен быть полностью перезапущен и восстановлен в прежнее состояние.
вот жизненный цикл действия, как показано в документации Android:
есть три ключевых цикла, которые могут вас заинтересовать в мониторинге в вашем активность:
1. вся жизнь действия происходит между первым вызовом onCreate (Bundle) до одного окончательного вызова onDestroy (). Действие будет выполнять всю настройку "глобального" состояния в onCreate () и освобождать все оставшиеся ресурсы в onDestroy (). Например, если поток работает в фоновом режиме для загрузки данных из сети, он может создать этот поток в методе onCreate() и затем остановить поток в onDestroy().
2. видимое время жизни действия происходит между вызовом onStart () до соответствующего вызова onStop (). В течение этого времени пользователь может видеть действие на экране, хотя оно может не находиться на переднем плане и взаимодействовать с пользователем. Между этими двумя методами можно поддерживать ресурсы, необходимые для отображения действия пользователю. Например, можно зарегистрировать BroadcastReceiver в onStart() для отслеживания изменений, влияющих на пользовательский интерфейс, и отмените регистрацию в onStop (), когда пользователь больше не видит, что вы отображаете. Методы onStart() и onStop() можно вызывать несколько раз, поскольку действие становится видимым и скрытым для пользователя.
3. время жизни переднего плана действия происходит между вызовом onResume () до соответствующего вызова onPause (). В течение этого времени действие находится перед всеми другими действиями и взаимодействует с пользователем. Деятельность может часто идти между возобновленные и приостановленные состояния - например, когда устройство переходит в спящий режим, когда результат действия доставлен, когда новое намерение доставлено-поэтому код в этих методах должен быть довольно легким.
вывод: вы не можете изменить порядок выполнения жизненного цикла.
попробуйте включить тосты в OnCreate и OnResume и проверить, если "onResume" тост приходит, когда вы запускаете приложение перед onCreate тост. Или распечатайте сообщение журнала из соответствующих методов
Я вещь @suri права. но если хотите быть более ясным с onCreate()
и onResume()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println(">>>>>> This is oncreate method");
....
}
@Override
protected void onResume() {
super.onResume();
System.out.println("This is onResume method <<<<<<<<<");
}
это проще всего проверить ваш вопрос.