почему «onPause» не вызывается в следующей ситуации? - PullRequest
5 голосов
/ 10 февраля 2012

В документе «onPause» вызывается, когда:

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

По сравнению с «onStop»разница составляет:

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

Но когда яНажмите и удерживайте клавишу HW-Home, после чего появятся «последние приложения», «onPause» не вызывается.

В данный момент я больше не могу взаимодействовать с исходным действием, но оно все ещевидимый.

Я смущен этой ситуацией.Пожалуйста, помогите объяснить.

Большое спасибо.BR, Генри

Ответы [ 5 ]

7 голосов
/ 10 февраля 2012

На самом деле это происходит потому, что при длительном нажатии кнопки «Домой» никакая активность не запускается. OnPause / onStop будет вызываться только в том случае, если вы выберете одно из приложений, представленных в списке «Недавние приложения».

Документы onPause () довольно понятны:

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

3 голосов
/ 10 февраля 2012
public class MainActivity extends Activity
{
    String tag="my result";

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Log.v(tag,"I am in oncreate");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.v(tag,"I am in onDestroy");
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.v(tag,"I am in onpause");
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        Log.v(tag,"I am in onRestart");
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.v(tag,"I am in onresume");
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.v(tag,"I am in onstart");
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Log.v(tag,"I am in onstop");
    }
}

Запустите его и проверьте logcat.Нажмите кнопку «Назад», а затем проверьте. После снова запустите приложение и

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

2 голосов
/ 20 июля 2015

Во многих современных телефонах список последних приложений является активным и вызывает onPause. Я проверил это на нескольких телефонах Samsung и LG, и пакеты com.android.systemui и com.lge.launcher2 соответственно.

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

0 голосов
/ 10 февраля 2012

Это то, что официальные документы говорят о onPause ()

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

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

Подробнее см. .

0 голосов
/ 10 февраля 2012

@ Генри, пожалуйста, попробуйте себя, проверив поток приложения. Создайте действие, в котором переопределите все методы и распечатайте журнал под всеми методами. Это поток onCreate >> onStart / restart >> onResume, и когда вы нажимаете кнопку «Домой» или запускаете какое-либо новое действие, он вызывается onPause >> onStop, и если вы заканчиваете свое приложение, тогда ваше приложение уничтожается / завершается, так что где-то путаница.

...