【问题标题】:Android - Very slow finishing of an activityAndroid - 一项活动的完成速度非常慢
【发布时间】:2022-01-17 23:03:17
【问题描述】:

我有一个关闭应用程序的“关闭”按钮。 我尝试了两种方法,但它们都很慢。

  1. 完成活动:
activity.finish()
  1. 发送主页意图(来自here
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

如何更快地关闭活动或将其发送到后台? 为什么点击“主页”按钮比发送ACTION_MAIN 意图快很多

【问题讨论】:

  • 有多慢。您的问题没有说明您遇到此问题的目的。
  • @snorlax 单击“关闭”按钮后,我希望活动关闭/发送到后台。两种方法都很慢,意思是“滞后”,主页完全加载需要 2-3 秒。单击设备的“主页”按钮会立即进行。
  • 目前还不清楚您为什么会注意到这种滞后。完成一项活动很快;触发意图可能很快,但仍会涉及许多层(从发送到在另一端接收)。我还没有查看 Home 按钮的 Android 源代码,但我怀疑它是否发送了意图……话虽如此,我没有注意到完成活动时的“2-3 秒”延迟。你有什么大任务吗?您的活动是否需要保存大量状态?

标签: android android-activity


【解决方案1】:

按下 HOME 按钮将在当前的 Activity 上调用 onPause()。因此它不是完全关闭应用程序而是暂停它。

Ergo:当然,即使在启动时也快得多,因为它保留了内存。

现在您知道如何暂停应用程序而不是关闭应用程序,如果您想有一个快速的方法。


如果你想关闭整个应用程序,我建议使用finishAndRemoveTask();

完成此任务中的所有活动并将其从最近的活动中删除 任务列表。

注意:返回按钮将调用onDestroy(),如果您想有其他方式。尝试最适合您使用的方法。


代码示例

使用 Button 以编程方式关闭应用程序,例如 HOME 按钮,而不使用透明的 View

Button close = findViewById(R.id.myCloseButton);
        close.setOnClickListener(view -> {
            finishAffinity();
        });

【讨论】:

  • 谢谢!有没有办法以编程方式触发 Activity.onPause() 方法(无需创建和调用透明活动)?
  • 我用一个代码示例更新了我的答案,以获得原始主页按钮的方法。如果对您有帮助,请随时将我的问题标记为正确。干杯和快乐的编码! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2011-01-11
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多