Android:可以在同一个任务中启动一个Activity的多个实例吗?

zer*_*lus 9 android

我尝试使用此代码从父活动启动多个活动:

for (int i=0; i<NUM_ACTIVITIES; i++) 
{
    Intent intent = new Intent(this, MyActivity.class);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

但是,根据我的登录MyActivity.onCreate(),实际上只创建了1个Activity.这种行为有望吗?如果是这样,启动多个活动的正确方法是什么?

Che*_*mon 9

您不能同时拥有多项活动.你是想让它们一个接一个地按顺序运行吗?

实现此目的的一种方法是为结果启动每个活动:

Intent intent = new Intent(this, MyActivity.class);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)

您使用请求代码跟踪活动何时运行的位置.然后,在onActivityResult中,您可以开始下一个:

protected void  onActivityResult  (int requestCode, int resultCode, Intent  data) {
  if (requestCode < NUM_ACTIVITIES) {
    Intent intent = new Intent(this, MyActivity.class);
    startActivityForResult(intent, requestCode + 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想在后台立即进行一些活动,可以通过在每个Activity的onCreate中调用startActivity将它们链接在一起.如果在创建任何视图之前在onCreate中启动新活动,则该活动将永远不可见.

protected void  onCreate  (Bundle savedInstanceState) {
  int numLeft = getIntent().getIntExtra("numLeft");
  if (numLeft > 0) {
    Intent intent = new Intent(this, MyActivity.class);
    intent.putExtra("numLeft", numLeft - 1);
    startActivity(intent);
  }
}
Run Code Online (Sandbox Code Playgroud)

这应该完成你想要的堆栈..

  • 喔好吧.我只是猜测,但我想问题是,一旦你调用startActivity,新的活动现在可以控制,你的旧活动就会被停止或暂停,所以在不再进行顶级的活动中会更多地调用startActivity失败.从开源开始,您可以逐步调试调试器中的调用,看看到底发生了什么.有关完成此操作的其他方法,请参阅我的编辑. (2认同)