7

我对 android 开发很陌生,我需要一些帮助来保存活动的状态。从 onPause 保存实例并从 onRestore 恢复它的正确方法是什么,因为显然 Android 没有像使用 onCreate 或 onSaveInstanceState 那样发送 savedInstanceState Bundle。或者有没有比使用 savedInstanceState 包更好的保存方法?

这有意义吗?

[编辑] 好的,我想我知道我真正的问题是什么......但首先,我认为我正在寻找的是使用 SharedPreferences 而不是 savedInstanceState。

所以,做更多的调试日志观察我注意到,而不是把 Activity 带到堆栈的顶部,它正在创建一个新的。是的,我意识到我正在创建一个新的......

         Intent itemintent = new Intent(MediaList.this, AudioPlayer.class);

         Bundle b = new Bundle();
        //...putString some strings to send
         itemintent.putExtra("android.intent.extra.INTENT", b);
         itemintent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
         startActivityForResult(itemintent,0);

...但是 FLAG_ACTIVITY_REORDER_TO_FRONT 不应该阻止它创建新活动吗?我猜它认为它必须创建一个新的,因为我正在发送一些字符串?

更好的是,只要字符串相同,我如何检查活动是否已经在堆栈中并切换到它?- 当用户从列表视图中单击媒体项目时,我开始此活动。[/编辑]

4

2 回答 2

3

出于某种原因,这并没有记录在非常非常大胆的霓虹闪烁字母中,我花了一段时间才发现,但是如果您只是使用 android:launchMode=[ 创建它,您不必担心您的活动是否存在"多个" | “单顶” | “单任务” | “singleInstance”] 属性设置为“singleInstance”。

然后只有一个实例,只要活动没有被垃圾收集,你的内存字段就会被保留。

您可以做的另一件事是创建一个应用程序(从应用程序扩展)并将所有持久对象存储在其中......就整个应用程序的生命周期而言,它首先创建并最后销毁(包括您的所有活动) - 更少的服务)。

只需创建一个 Application 类并在清单中指定它,如下所示:

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:name=".MyApplication">

然后,如果您仍然真的想在应用程序将要关闭的情况下保存您的值,只需使用 SharedPreferences。

于 2011-04-26T01:17:55.600 回答
1

你说的这个onRestore方法是什么?它不是 Activity 生命周期的一部分……我猜你的意思是onRestart. 无论如何,你没有得到一个捆绑包的原因onRestart是因为你不需要一个。您的活动尚未被正式“杀死”,因此您无需从已保存状态恢复。您的活动已暂停,但并未从内存中删除,因此系统只是告诉您它再次可见。对于这种过渡事件,您可能不需要做任何事情。

除此之外,执行此操作的方法是将任何您认为是“状态”值的内容保存在 中onSaveInstanceState(),然后将它们恢复到onCreate. 之后,您可以在其onCreate自身上或在 Activity 生命周期的后期(例如onResume)中恢复任何特定于视图的属性。

于 2011-04-25T23:32:46.453 回答