Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 开始活动后,startActivity()会产生什么后果?_Java_Android_Android Studio - Fatal编程技术网

Java 开始活动后,startActivity()会产生什么后果?

Java 开始活动后,startActivity()会产生什么后果?,java,android,android-studio,Java,Android,Android Studio,假设我有活动A和活动B 在A中,我有一个按钮,单击该按钮时运行以下代码 startActivity(new Intent(this, ActivityB.class)); startActivity(new Intent(this, ActivityA.class)); 在B中,我有一个按钮,单击该按钮时运行以下代码 startActivity(new Intent(this, ActivityB.class)); startActivity(new Intent(this, Activi

假设我有活动A和活动B

在A中,我有一个按钮,单击该按钮时运行以下代码

startActivity(new Intent(this, ActivityB.class));
startActivity(new Intent(this, ActivityA.class));
在B中,我有一个按钮,单击该按钮时运行以下代码

startActivity(new Intent(this, ActivityB.class));
startActivity(new Intent(this, ActivityA.class));
因此,当应用程序启动且用户执行以下操作时:

  • 点击活动A中的按钮(他进入活动B)
  • 点击活动B中的按钮(他返回活动A)
  • 再次单击活动A中的按钮(再次转到活动B)
在这种情况下,活动A和B是否会占用内存,因为它们每次都会启动?或者Android是否足够聪明,可以知道某个活动已经启动,只需要放在堆栈的顶部

换句话说,如果内存确实被阻塞了,是否有类似的情况:

if(activity has already started)
{
   doNotStartActivityButSimplyPutItAtTop();
}
else
{
   startActivity(new Intent.....);
}

是的,你的假设是正确的,android能够管理这些活动,并且它们保持了适当的堆栈


如果只有两个活动,则可以使用singletop launcher模式,这样堆栈中只剩下两个活动。

android系统可能会释放堆栈中以前活动的资源。为避免丢失“活动”的当前状态,您可能必须将其保存,然后在重新创建“活动”时恢复。请参阅。

Android足够智能,如果活动在堆栈中,则它将出现在前台,除非您强制启动,即添加标志,如
FLAG\u activity\u SINGLE\u TOP
等。