Android - 从另一个活动中结束活动

4

有没有办法从堆栈中结束某个活动?我有一个服务,它查找更新,当找到更新时,它会打开更新活动,在那里会出现提示安装。但是在安装完成后,我想结束更新活动,因为它不必继续留在堆栈上。

谢谢

5个回答

5

如果更新活动正在启动另一个安装活动,则您可能需要在更新活动中覆盖 void onActivityResult(int requestCode, int resultCode, Intent intent),并提供以下实现。此外,当更新活动启动安装活动时,应使用 startActivityForResult(Intent, int) 而不是 startActivity(Intent)

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent intent)
  {
    super.onActivityResult(requestCode, resultCode, intent);
    finish();
  }

5

非常有用的代码

classname.static object.finish();

4
请尝试以下方法。
在第一个活动中,在onCreate之前定义“this”。
static TabsViewPagerFragmentActivity activityMain;

然后,在第一个活动的onCreate中,编写以下内容。
activityMain = this;

然后,在第二个活动中,当您想要完成第一个活动时,请编写以下内容。
TabsViewPagerFragmentActivity.activityMain.finish();

这将销毁第一个活动,当您在第二个活动上按返回键时,您将直接返回主页。


静态引用活动 - 内存泄漏 - Lester

2
使用活动类的 finish() 方法来结束特定的活动。
this.finish(); // you can also use the application context  instead of this 

希望这能帮到你。

如果我有一个名为update的活动 - 我可以从其他类中调用update.finish()吗?- 这就是我需要的。 - Waypoint
我经常使用finish(),但仍然无法从其他(较新的)活动完成堆栈上的一个活动。 - Waypoint
使用 finishActivity(int requestCode) 方法来结束之前使用 startActivityForResult(Intent, int) 启动的另一个活动。 - Dinesh Sharma

0
但是在安装完成后,我想要结束更新活动,因为仍然停留在堆栈中是没有必要的。
当您的“更新活动”调用startActivity()来启动“安装程序”时,请立即在自身上调用finish()

是的,问题在于我正在从AsyncTask启动新活动,因此我无法在自己上调用finish()。 - Waypoint
@Hmyzak:永远不要从AsyncTask启动新的活动。这是对用户不友好的,会导致活动突然出现而没有警告。 - CommonsWare
通过AsyncTask,我正在下载更新文件,当下载完成后,我使用onPostExecute来安装此应用程序。我没有看到其他方法,你有吗? - Waypoint
2
@Hmyzak:在Android 2.3之前使用IntentService,在2.3及以上版本使用DownloadManager,这样用户在下载过程中不会被绑定在你的应用程序上。当下载完成时,发出一个通知。当用户点击通知时,再安装应用程序。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接