我在这里阅读了几个类似的问题,但我没有找到对我的问题的明确答复。
ActivityA
位于前台button
(ActivityA
),然后我打开(并放入前景,然后可见和ontop)ActivityB
。我只是通过命令myContext.startActivity(myIntent);
ActivityA
位于后台(onPause()
),然后不可见。button
ActivityB
与目标一起放入前景(然后再显示ontop
)ActivityA
这样做的正确和最佳方法是什么?根据我的理解(但我不确定它是否正确。)它不应该是startActivity()
,因为startActivity()
创建了ActivityA
的另一个实例(它调用onCreate()
)然后将有2个ActivityA
运行实例(一个在前台,一个在后台)。我想得到的是onResume()
ActivityA
(而不是onCreate()
)。
第二个问题是:我怎么知道ActivityA
在后台仍然存在?也许在一段时间后系统将其杀死以释放资源。
注意:我的案例中的解决方案无法在我打开finish()
时使用ActivityA
销毁ActivityB
,然后使用startActivity()
重新打开它,因为我需要ActivityA
尽可能地活着。
非常感谢您提前 福斯托
答案 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
答案 3 :(得分:-1)
您可以在活动A中使用StartActivity替代StartActivity,而在活动B上使用setResult可以再次打开活动A.在这种情况下,活动A的OnActivityResult()被称为onCreate()。