0

有人可以澄清一下为什么我有这么奇怪的行为。直到文档中,只要应用程序Bundle savedInstanceState处于活动状态,它就处于活动状态,所以当它处于前台或后台时。onSaveInstanceState()在应用程序被杀死后,savedInstanceState实例也被杀死。这是我所拥有的:

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

        if (savedInstanceState != null) {
            Log.i("Dev", "not null");
        } else {
            Log.i("Dev", "null");
        }
    }

这是我的设置方式:

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("bool", true);
    }

然后,我在模拟器中启动应用程序。打开应用程序后,我单击home按钮,以便启动器可见。然后我使用 adb 终止应用程序的进程。之后,我从最近使用的应用程序列表中启动应用程序,期望 Logcat 中为“ null ”,但我实际看到的是“ not null ”,所以我的理解不正确?

4

2 回答 2

0

这里不是说得很清楚?还是我误解了你的问题?

[..]To save additional data about the activity state, you must override the onSaveInstanceState() callback method. The system calls this method when the user is leaving your activity and passes it the Bundle object that will be saved in the event that your activity is destroyed unexpectedly. If the system must recreate the activity instance later, it passes the same Bundle object to both the onRestoreInstanceState() and onCreate() methods.

保存的实例生命周期

我的意思是对我来说,这在大多数情况下也是合理的。因为当您的活动/应用程序在后台并且android系统将其关闭(假设因为它需要更多内存)时,它首先会保存状态。因此,下次用户打开您的活动时,您可以恢复它的先前状态(这也可能正是用户想要的,因为关闭活动的不是他,而是系统本身)。

于 2013-06-03T06:31:33.093 回答
0

只要 Android 希望它被保存/可以保存它,Bundle 就会被保存。Android 的“功能”之一(引用,因为它最终成为一个坏主意,就像它是一个好主意一样)是应用程序永远不会退出(在用户看来)。他们这样做的机制是 onSaveInstanceState——它存储 Bundle,当应用程序稍后通过某种方法(例如从最近的活动菜单)重新初始化时,它将将该 Bundle 传递给 onCreate 并让它重新初始化自己。

当然,这也会带来问题。例如,如果您保存登录信息,退出应用程序不会将您注销。因此,用户可以将手机交给朋友观看视频,以为他退出了他的手机银行应用程序并且是安全的,但朋友可以重新调用它并重新创建它。如果您的应用程序在静态变量或单例中具有大型数据结构,除非您仔细编码,否则不会重新创建它们。需要按顺序探索活动的应用程序可以从中间重新启动。

现在 Android 可以选择忘记你的 Bundle。如果您在其中放入几 MB,我希望 android 很快就会忘记它。但它会尽可能长时间地记住它。

于 2013-06-03T06:40:46.440 回答