5

根据文档,在以下情况下调用“onPause”:

当系统即将开始恢复以前的活动时。

与“onStop”相比,区别在于:

当活动不再对用户可见时调用,因为另一个活动已恢复并正在覆盖该活动。

但是当我长按 HW-Home 键并显示“最近的应用程序”时,不会调用“onPause”。

此时,我无法再与原始活动交互,但它仍然可见。

我对这种情况感到困惑。请帮忙解释一下。

非常感谢你。BR,亨利

4

5 回答 5

7

这实际上会发生,因为当长按 Home 键时,没有启动任何活动。仅当您选择“最近使用的应用程序”列表中存在的应用程序之一时,才会调用 onPause/onStop。

onPause() 的文档非常清楚:

当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。

于 2012-02-10T10:25:07.183 回答
3
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.press 后退按钮然后 check.after 再次启动应用程序并

按呼叫按钮然后检查 logcat 现在按返回按钮并再次检查 logcat。您可以轻松了解Activity的生命周期。

于 2012-02-10T11:35:47.303 回答
2

在许多现代手机中,最近的应用程序列表是一项活动,并且会触发onPause. 我已经在几部三星和 LG 手机上对此进行了测试,包装分别是com.android.systemuicom.lge.launcher2

也就是说,当您打开最近的应用程序屏幕时,您似乎不能依赖接收 onPause。我很想知道有多少设备不给你onPause...

于 2015-07-20T14:57:42.820 回答
0

@Henry 请通过测试应用程序的流程来尝试自己。创建一个覆盖所有方法并在所有方法下打印日志的活动。流程是 onCreate>>onStart/restart>>onResume,当您按下主页按钮或启动任何新活动时,它会调用 onPause>>onStop,如果您完成您的应用程序,那么您的应用程序将被销毁/完成,所以混乱在哪里。

于 2012-02-10T10:19:53.970 回答
0

这就是官方文档中关于onPause()的说法

当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。onResume() 的对应项。

当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,因此请确保此处不要做任何冗长的事情。

详情请看这个

于 2012-02-10T10:49:53.040 回答