如何将前景中的Android活动置于前台

时间:2015-12-10 12:51:19

标签: android android-activity

我在这里阅读了几个类似的问题,但我没有找到对我的问题的明确答复。

  • 我启动了Android应用,我的主要ActivityA位于前台
  • 一段时间后,我推了一个buttonActivityA),然后我打开(并放入前景,然后可见和ontop)ActivityB。我只是通过命令myContext.startActivity(myIntent);
  • 来做到这一点
  • 这意味着现在ActivityA位于后台(onPause()),然后不可见。
  • 过了一段时间后,我推动另一个button ActivityB与目标一起放入前景(然后再显示ontopActivityA
  • 这样做的正确和最佳方法是什么?根据我的理解(但我不确定它是否正确。)它不应该是startActivity(),因为startActivity()创建了ActivityA的另一个实例(它调用onCreate())然后将有2个ActivityA运行实例(一个在前台,一个在后台)。我想得到的是onResume() ActivityA(而不是onCreate())。

  • 第二个问题是:我怎么知道ActivityA在后​​台仍然存在?也许在一段时间后系统将其杀死以释放资源。

注意:我的案例中的解决方案无法在我打开finish()时使用ActivityA销毁ActivityB,然后使用startActivity()重新打开它,因为我需要ActivityA尽可能地活着。

非常感谢您提前 福斯托

4 个答案:

答案 0 :(得分:1)

开始新活动时,您需要的是FLAG_ACTIVITY_REORDER_TO_FRONT。这将导致后台活动在运行时被带到前台,或者如果它根本没有运行则创建一个新实例。

从ActivityB内部:

Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

答案 1 :(得分:1)

  

这样做的正确和最佳方法是什么?

使用startActivity(),并添加Intent Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

  

它不应该由startActivity(),因为startActivity()创建另一个ActivityA实例

虽然这是默认行为,但Intent标志可以改变该行为。

  

我怎么知道ActivityA在后台还活着?

如果您没有finish(),并且您的流程尚未终止,则表示该流程已存在。

  

也许在一段时间后系统将其杀死以释放资源。

Android终止进程以释放系统RAM。它不会自行破坏活动。

  

因为我需要活动A尽可能活着

说实话,这表明你有其他架构问题。请记住,活动会因各​​种原因而被破坏和重新创建,例如配置更改(例如,屏幕旋转)。活动应该是非常一次性的。

答案 2 :(得分:1)

    You can use following
    1. For launching new instance (current state of ActivityA) and get ActivityA on Top of Stack

       Intent intent = new Intent(this, ActivityA.class);
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
       startActivity(intent);

    2. For launching old instance and get ActivityA on Top of Stack

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

   For more detail please check

Task and Back Task

答案 3 :(得分:-1)

您可以在活动A中使用StartActivity替代StartActivity,而在活动B上使用setResult可以再次打开活动A.在这种情况下,活动A的OnActivityResult()被称为onCreate()。