почему onPause не вызывается в следующей ситуации?

По документу "onPause" вызывается, когда:

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

По сравнению с "onStop" разница в следующем:

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

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

В этот момент я уже не могу взаимодействовать с исходной активностью, но она все еще видна.

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

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


person Henry    schedule 10.02.2012    source источник
comment
можете ли вы опубликовать свой код в onPause()   -  person Raj    schedule 10.02.2012
comment
см. это: stackoverflow.com/a/9190541/265167   -  person Yaqub Ahmad    schedule 10.02.2012


Ответы (5)


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

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

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

person MobileCushion    schedule 10.02.2012
comment
Спасибо, MobileCushion, Ваш ответ правильный. Дело в том, что последнее приложение не будет добавлено в стек приложений, отсюда и результат. - person Henry; 22.02.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. вы можете легко понять жизненный цикл Activity.

person arpit    schedule 10.02.2012

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

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

person Anubian Noob    schedule 20.07.2015

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

person deepak Sharma    schedule 10.02.2012