Intereting Posts
Android – создайте уведомление, TaskStackBuilder.addParentStack не работает Как эффективно реализовать шаблон MVVM для моего приложения для Android, который также облегчит написание тестовых примеров? Не удалось подключиться к службе камеры Как прокси-запросы на api.twitter.com, включая SSL-сертификаты? Интеграция Git-репозитория Visual Studio в Android Studio 1.0.2 Типы строк ошибок, недопустимые в android: configChanges в файле манифеста SQLite Android. Невозможно открыть файл базы данных Высота панели действий по умолчанию Android Studio 2.0 Ожидание отладчика Java.lang.ClassCastException: android.text.SpannableStringBuilder нельзя передать в java.util.ArrayList Закрыть навигационный ящик при запуске приложения Скриншот андроидной медиафотографии содержит черную рамку Как предоставить / dev / bus / usb разрешения для приложений libusb android? Когда ВСЕ, когда вызывается метод onSaveInstanceState ()? В Android CLI build отображается недопустимая ошибка имени каталога ресурса: MY_PROJECT \ res / crunch

Разница между onPause и onStop ()

Из документа android doc здесь http://developer.android.com/reference/android/app/Activity.html он сказал, что «Активность выходит на передний план» вызовет onPause() , а «Activity is onStop() visible» будет вызывать onStop() .

Разве не «активность выходит на передний план» так же, как «Активность больше не видна»? Не могли бы вы рассказать мне, в чем разница между ними?

Solutions Collecting From Web of "Разница между onPause и onStop ()"

Нет, если какая-то деятельность выходит на передний план, это не обязательно означает, что другая деятельность полностью невидима. Рассмотрим следующий случай:

Деятельность с темой Theme.Dialog

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

Это оставляет вопрос, какая деятельность считается полностью непрозрачной и покрывает весь экран, а какая нет. Это решение основано на окне, содержащем активность. Если в окне есть флаг windowIsFloating или windowIsTranslucent , то считается, что эта активность не делает невидимым базовый материал, в противном случае он вызывает и вызывает onStop() . Соответствующий код можно найти в com.android.server.am.ActivityRecord :

 fullscreen = ent != null && !ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false) && !ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); 

Если вы все еще видите какую-либо его часть (действие, выходящее на передний план, либо не занимает весь экран, либо несколько прозрачно), onPause() . Если вы не видите какой-либо его части, onStop() .

Например, диалог ** может не охватывать всю предыдущую Activity , и это будет время onPause() .

** Я не имею в виду Android Dialog здесь, скорее концептуальную идею чего-то, что всплывает и только скрывает часть экрана пользователя. Эта заметка была добавлена ​​для пояснения на основе комментария от @GMsoF ниже

Нахождение на переднем плане означает, что активность имеет фокус ввода. Например, действие может быть видимым, но частично затененным диалогом с фокусом. В этом случае onPause() , но не onStop() . Когда диалог исчезнет, ​​будет onResume() метод onResume() активности (но не onStart() ).

Yeap, я пытаюсь понять, и я могу объяснить это ниже:

Есть 2 мероприятия: ActivityA & ActivityB

 public class ActivityA extends Activity implements OnClickListener { // button private Button mBtnChangeActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); initialize(); setEvent(); } private void initialize() { Log.i("Activity A", "Initialize()"); mBtnChangeActivity = (Button) findViewById(R.id.btn_change_activity); } private void setEvent() { Log.i("Activity A", "setEvent()"); mBtnChangeActivity.setOnClickListener(this); } @Override protected void onStart() { super.onStart(); Log.i("Activity A", "onStart"); } @Override protected void onResume() { super.onResume(); Log.i("Activity A", "onResume"); } @Override protected void onPause() { super.onPause(); Log.i("Activity A", "onPause"); } @Override protected void onStop() { super.onStop(); Log.i("Activity A", "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("Activity A", "onDestroy"); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_change_activity: Intent activityB = new Intent(this, ActivityB.class); startActivity(activityB); break; default: break; } } 

Вот активность B. Следуйте моему комментарию в коде

 public class ActivityB extends Activity implements OnClickListener { // button private Button mBtnChangeActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); initialize(); setEvent(); // if call finish() here, activityA will don't stop, just pause // Activity A will call onStop() when Activity B call onStart() method finish(); } private void initialize() { Log.i("Activity B", "Initialize()"); mBtnChangeActivity = (Button) findViewById(R.id.btn_change_activity); } private void setEvent() { Log.i("Activity B", "setEvent()"); mBtnChangeActivity.setOnClickListener(this); } @Override protected void onStart() { super.onStart(); Log.i("Activity B", "onStart"); } @Override protected void onResume() { super.onResume(); Log.i("Activity B", "onResume"); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_change_activity: finish(); break; default: break; } } } 

Надеюсь, это ясно