如何在Android应用程序中维护以前的屏幕历史?

时间:2012-10-09 11:41:28

标签: android

在我的申请中有十项活动。

当我按下后退按钮时,10个屏幕保存了历史记录。但是当我点击下一个按钮时,新屏幕没有任何历史数据。

单击下一个按钮时如何保留历史记录? 我的意图代码是

Bundle bundle = getIntent().getExtras();
String Group = bundle.getString("GroupApVehicle");
Intent log = new Intent(EngineCompartment.this, FrontAxle.class);

Bundle bun = new Bundle();
bun.putString("Group", Group);
bun.putString("ECSCORE", _StrpretriScoreCount);
System.out.println("Enginegroup" + Group);
bun.putString("TestIDFA", strtestid);
log.putExtras(bun);
startActivityForResult(log,IPC_ID);

3 个答案:

答案 0 :(得分:6)

我建议您通过实施onSaveInstanceState()回调来保存您的活动状态。机会是在Android尝试清理内存的10个不同活动之后,保存活动状态可确保操作系统知道您希望保留历史记录。

有关详细信息,请参阅此处:http://developer.android.com/guide/components/tasks-and-back-stack.html#ActivityState

答案 1 :(得分:1)

请描述您的后台堆栈的当前状态(例如活动A - > B - > C - > D)以及您要实施的行为(例如切换活动D - > B)。

编辑:

据我了解,您希望将活动保留在内存中,并在用户按下“后退”按钮时保持其状态。 您可以使用以下代码覆盖后退按钮的行为:


    public void onBackPressed () {
        moveTaskToBack (true);
    }

但不能保证,Android会让你在内存中活动。如果操作系统需要额外的内存,它可能会被破坏。修复:您的应用程序应该监听活动中的onPause()和onResume()事件。您必须序列化和反序列化您的数据,在活动暂停和恢复时保存活动的状态。

此外,您应该将此属性添加到AndroidManifest.xml中的每个活动块,您只想初始化一次并在应用程序生命周期内保留它的状态:


    android:launchMode="singleTask" 

然后使用以下代码示例在活动之间切换:


    Intent i = new Intent(C.this, B.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);

您也可以使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT,但也应将launchMode设置为“singleTask”。

答案 2 :(得分:1)

您可以在sharedPreference中手动存储历史记录。 它是android中的一个数据存储因子 http://developer.android.com/reference/android/content/SharedPreferences.html