我试图根据Android Guidelines来控制我的停止/重启行为,但这有点棘手。我希望我的应用程序在最小化并点击启动器图标后恢复状态。
当前行为使得我可以在应用程序之外进行HOME,当用户使用长按列表返回时,一切都按预期运行。现在,尝试返回点击应用程序图标会启动默认活动,它不会将onRestoreInstanceState考虑在内,同时保持旧任务的亲密关系在他们的后台堆栈中打开。
活动有onCreate,onResume,onSavedInstanceState重写,调用它们的super,并且类型为SingleInstance。
答案 0 :(得分:3)
在我的一个应用程序开发期间,我遇到了类似的问题,其中app有单个活动,需要保存一些状态值(通常是字符串,布尔值)onpause。我会告诉你我是如何处理它的,我希望它对你也有用。
protected void onPause() {
super.onPause();
saveState();
}
protected void onResume() {
super.onResume();
retrieveState();
}
不要忘记改变焦点...
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
retrieveState();
}
else { saveState(); }
}
现在保存并检索数据
public void saveState()
{
SharedPreferences settings = getSharedPreferences(WEBSTATE, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(CURRENT_URL_STATE, "some url");
editor.putInt(FILECOUNT, 10);
/* any other content... */
editor.commit();
}
public void retrieveState()
{
SharedPreferences settings = getSharedPreferences(WEBSTATE, 0);
String current_url = settings.getString(CURRENT_URL_STATE, "");
int count = settings.getInt((FILECOUNT, 0);
/*use these value as per requier.. */
}
答案 1 :(得分:0)
目前的行为使得我可以将HOME从应用程序中移出,并且当时 用户使用长按列表返回所有行为 预期。现在,尝试返回点击应用程序图标启动 默认活动,它没有考虑到RestoreInstanceState, 同时保持旧任务的亲密关系在他们的后台开放。
让我们说你有2个活动:A和B.活动A是你的入口点,所以当你点击app图标时(实际上这是错误的陈述,因为这是活动图标,而不是应用程序图标)您启动活动A.现在您必须进行活动B并按HOME。当您现在打开最近的列表时,您将看到活动B,并且将能够返回它。但是当你点击你的应用程序图标时#34;在启动器屏幕上,您将输入活动A.这是正常和正确的行为。另请注意,savedInstanceState
并非您最常想到的应用程序的整体状态。
另请注意,您的Activity类可以多次实例化,这取决于您的应用程序架构,也会导致不正确的导航行为。您可以尝试使用清单文件中的android:launchMode
来控制此操作(您将find android documentation here)。
最后,如果可能,请考虑重新处理您的应用程序以使用Fragments
而不是多个活动 - 这将简化控制应用程序流程。
答案 2 :(得分:0)
不确定这是否是你想要做的,但我有一个类似的问题,我想要一个基本活动返回,而我无法从SingleInstance获得所需的结果,我定义了一个新的活动,这是主要推出:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
通过该活动,我使用所需的FLAG clear-top启动了我想要的活动,并完成了主要的启动活动。