1

我在 android 的活动中使用静态变量(它不是主要活动)。但是当我进入主要活动并按下后退按钮时,静态值保持不变。后退按钮不会终止主进程。为什么?

4

3 回答 3

8

使用后退按钮会破坏活动,而不是应用程序。所有活动都是在 Dalvik VM 中运行的应用程序的一部分。应用程序仍然存在,正在运行(即使所有活动都已被破坏),直到系统决定它需要资源并终止进程。

因此,只要进程/应用程序正在运行,您的静态成员就会保留在内存中。

如果您尝试运行一些内存密集型应用程序或使用某些任务管理器关闭正在运行的应用程序,您可能会看到静态值重置。

于 2012-07-26T14:20:21.470 回答
1

试试这个,

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK))
        {
            finish();
            System.exit(0);
        }
        return super.onKeyDown(keyCode, event);
    }
于 2012-07-26T12:48:34.040 回答
1

用户按下后退按钮以离开主活动并不能保证该活动将被销毁。它只是将您的 UI(活动)移动到不被看到。请参阅https://developer.android.com/reference/android/app/Activity.htmlhttps://developer.android.com/training/basics/activity-lifecycle/index.html

更新:

下面是第二个网页的一些文本片段: 图 1 中的文本:“当用户离开您的活动时,系统调用 onStop() 来停止活动 (1)。如果用户在活动停止时返回,系统会调用 onRestart() (2),紧接着是 onStart() (3) 和 onResume() (4)。请注意,无论哪种情况导致 Activity 停止,系统总是在调用 onStop() 之前调用 onPause()。”</p>

并且“注意:因为系统在停止时会将你的 Activity 实例保留在系统内存中,……”</p>

并且:“当您的活动收到对 onStop() 方法的调用时,...... 一旦您的活动停止,如果需要恢复系统内存,系统可能会破坏实例。在极端情况下,系统可能会简单地终止您的应用程序进程而不调用活动的最终 onDestroy() 回调,...。“</p>

以上所有内容都表明,当用户离开您的活动(通过您场景中的后退按钮)时,它不一定被破坏。它只是最初停止。

于 2012-07-26T12:52:25.310 回答