按下后退按钮时不要杀死活动

时间:2014-04-29 11:41:07

标签: java android navigation android-activity countdowntimer

我有四项活动,ABCD。

用户最初会进入ABCD,然后用户可能需要点击后退按钮来检查C上的某些内容,然后点击C上的按钮再将其转发到D.

我遇到的问题是D正在运行倒计时器,需要继续倒计时并更新活动D视图。如果我当前点击返回C然后点击再次前进到D,倒数计时器仍在运行但未连接,因为已为D创建了新活动。

我希望用户能够在不影响或破坏D的情况下导航回C,这样我就可以将我的计时器连接到视图。

最后,如果用户点击回B,它会破坏C和D活动(以及倒数计时器)。

2 个答案:

答案 0 :(得分:1)

您可以使用此

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, C.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
}

将您的D活动设置为后台,然后从C中恢复它

Intent intent = new Intent(this, D.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

但是,您应该使用服务来执行此类后台任务。

答案 1 :(得分:0)

当用户离开活动时,它会在saveInstanceState回调时轻松保存计时器值和当前时间。当活动重新创建时,使用计时器值加上(当前时间 - lastSavedTime)并设置计时器。


它应该可以正常工作但你可以通过使用片段和ViewPager以更好的方式实现这一点。

如果您以前没有使用过ViewPager。它是一个组件,可以通过向左或向右滑动屏幕在不同视图之间切换。默认情况下,视图寻呼机会加载当前视图,并在两侧加载一个视图。因此,如果您在第1页(索引0)第1页并加载第2页。如果你在第2页,第2页,第1页和第3页将被加载,依此类推。好消息是你可以使用像这样的简单代码来改变每个片段附近加载的页面数量

mViewPager.setOffscreenPageLimit(3);

所以现在加载了所有4个片段。所以你在屏幕上加载了4个片段。根据developers.android.com所有其他观点(除了屏幕上的一个)都是加载但处于空闲状态所以我不认为你可以将你的计时器放在片段D中。但这不会成为一个问题因为你只有一个活动。在您唯一的活动中实施您的计时器,它将正常工作,因为页面更改时不会销毁此活动。但是您仍然需要保存相同的数据(计时器数据+当前时间),因为用户切换到另一个应用程序可能会停止活动。

您需要做的最后一件事是访问片段中的计时器数据。我不会解释如何,因为有很多关于如何在活动和片段之间进行通信的教程,但只是为了让你想到你需要在片段中声明一个接口,在activity中实现这个接口并在片段中使用这个接口来访问计时器数据。

第二种解决方案要复杂得多,但它为用户提供了更好的体验,并且性能提升也很明显。决定女巫最适合你。祝你好运