Android任务和后台堆栈。管理历史

时间:2015-08-04 23:07:40

标签: android android-intent back-stack

尝试在Android应用程序中管理任务和后台堆栈 我在其中使用滑动菜单,我可以从中开始不同的活动:Activity1,Activity2 ...(每个活动的菜单类似)。
MainActivity是一个启动器 我可以在这些活动之间导航,当我按下后退按钮时,我必须总是回到MainActivity。

这就是为什么我从没有历史的菜单开始活动的原因:

Intent i1 = new Intent(getApplicationContext(), Activity1.class);
i1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i1);

问题是,从Activity1我也可以开始一个我必须保留历史的意图:

Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:1234567890"));
startActivity(callIntent);

拨号后我想回到Activity1,但正如你现在所看到的,我将回到MainActivity(因为没有历史记录)。

此外,我尝试使用历史记录开始新活动并完成上一个活动:

  Intent i1 = new Intent(getApplicationContext(), Activity1.class);
  finish();
  startActivity(i1);

这里所有的一切都是正确的拨号意图(我不会在拨号前完成Activity1),但每当我按下后退按钮我退出应用程序。

试图在图片上显示这个想法

enter image description here

也尝试在清单中玩noHistory,但没有成功。
我可以在启动事件之前返回历史记录(带有wlags或extras),也就是没有历史记录吗?

如何解决?

2 个答案:

答案 0 :(得分:1)

应用程序退出是因为您在转到Activity1时完成了MainActivity 所以要解决它:你可以在启动Activity1时删除> as.POSIXct(times, format=formats) [1] "2015-07-03 00:15:00 EDT" "2015-07-03 00:15:00 EDT" > attributes(as.POSIXct(times, format=formats)) $class [1] "POSIXct" "POSIXt" $tzone [1] "" , 单击Activity1中的后退按钮时重新启动MainActivity 将此代码添加到您的Activity1

finish()

答案 1 :(得分:0)

如果您的应用程序地图不会更改,您可以在清单中为您拥有的每个活动设置“父活动”属性。

例如

for Activity 1/2/3 - 父母将成为您的MainActivity。

您可以通过更改清单中的活动项来执行此操作

<meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.MainActivity" />

另一种方法是覆盖行为不同的activitie类中的“onBackPressed”方法