我对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不应该阻止它创建新活动吗?我猜它认为它必须创建一个新的,因为我发送了一些字符串?
更好的是,我怎样才能检查活动是否已经在堆栈中并切换到它,只要字符串相同? - 当用户从列表视图中单击媒体项时,我正在启动此活动。 [/编辑]
答案 0 :(得分:3)
出于某种原因,这个没有在非常大胆的霓虹闪烁字母中记录,并且花了我一段时间才发现,但如果你只是用它来创建它,你不需要担心你的活动是否存在。 android:launchMode = [“multiple”| “singleTop”| “singleTask”| “singleInstance”] 属性设置为“singleInstance”。
然后只有一个实例,只要活动没有被垃圾回收,你的内存字段就会被保留。
您可以做的另一件事是创建一个Application(从Application扩展)并将所有持久对象存储在其中...它首先创建并在整个应用程序的生命周期中被销毁(包括你所有的无活动服务)。
只需创建一个Application类并在清单中指定它,如下所示:
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:name=".MyApplication">
然后,如果您仍然希望在应用程序即将关闭的情况下保存您的值,请使用SharedPreferences。
答案 1 :(得分:1)
您说的onRestore
方法是什么?它不是Activity生命周期的一部分...我想你的意思是onRestart
。无论如何,你没有获得onRestart
包的原因是因为你不需要一个。{1}}。您的活动尚未正式“杀死”,因此您无需从已保存的状态恢复。您的活动已暂停,但未从内存中删除,因此系统只是告诉您它已再次显示。您可能不需要为此类转换事件做任何事情。
除此之外,这样做的方法是在onSaveInstanceState()
中保存您认为是“州”值的任何内容,然后在onCreate
中恢复它们。之后,您可以在onCreate
本身或稍后的活动生命周期(例如onResume
)中恢复任何特定于视图的属性。