【问题标题】:is the "MainActivity" special kind of activity, does it differ from any other activity?“MainActivity”是一种特殊的活动,它与任何其他活动有什么不同吗?
【发布时间】:2020-12-24 08:32:32
【问题描述】:

除了是应用程序启动时的第一个Activity之外,main Activity还有什么特别之处吗? 发件人:https://developer.android.com/codelabs/android-training-create-an-activity#0

一个应用程序通常由多个松散绑定到的屏幕组成 彼此。每个屏幕都是一个活动。通常,一个活动 app 被指定为“主要”活动(MainActivity.java),即 应用程序启动时呈现给用户。主要活动可以 然后启动其他活动来执行不同的操作。

从上面的引用看来,我们有以下层次结构:

但接着说:

每次新的活动开始时,前一个活动就会停止,但是 系统将活动保存在堆栈(“后堆栈”)中。什么时候 一个新的活动开始,新的活动被推到后台堆栈 并以用户为中心。后栈遵循基本的“后进先入” out”堆栈逻辑。当用户完成当前活动并 按下后退按钮,该活动从堆栈中弹出并 销毁,并恢复之前的活动。

这是否也适用于"MainActivity"?如果"MainActivity" 被销毁,这是否会导致应用程序崩溃,即MainActivity 的生命周期是否与任何其他活动的生命周期有任何不同? MainActivity 是 App 退出时停止的最后一个 Activity 吗?

我为什么需要这个:

我想在应用程序退出时释放一些资源(在onStop() 方法中(因为在Honeycomb 之后保证会调用onStop)),尤其是ExecutorServices,我在这里读过即使 App 已退出,也不能保证 ExecutorService 将被停止并使 JVM 继续工作/运行,即使 App 已关闭/杀死并将继续使用系统资源。

【问题讨论】:

  • 只是一个和别人没什么区别的名字
  • 不是真的,它是默认值。
  • 它是默认的,因为 Android Studio 有一个内置的template,它将启动/初始活动命名为MainActivity,仅此而已。您几乎可以将其命名为任何您想要的名称,NotSoMainActivitySplashActivity,只需更改清单中的相应活动即可。

标签: java android android-activity


【解决方案1】:

当用户按下冷启动图标时,Main Activity 是您的应用程序的入口点。您可以通过 Intent Filter 将任何 Activity 设为 AndroidManifest.xml 文件中的主要 Activity。 Intent Filter 告诉系统哪个活动是主要活动。

虽然主要活动通常被认为是第一个入口点,但请记住,主要活动并不总是要启动的第一个活动,例如,可以将各种意图过滤器分配给您的其他活动,并且该活动可以在相关操作之后直接打开。请阅读Intent-Filter here.

例如,您的应用是图库应用,典型的第一个屏幕是专辑列表。您可以从中查看 PhotoActivity 中的单张照片。这个 PhotoActivity 可以直接通过外部应用程序的意图打开以查看特定照片,而无需启动主 Activity。 (查看谷歌照片应用)

关于 ExecutorServices 或其他服务生命周期,这里有几个选项:

  1. 实现所有权机制,即启动服务的活动负责关闭服务
  2. 您可以监控应用的 Activity 堆栈并在 Activity 堆栈为空时终止服务。
  3. 利用应用程序类生命周期来监控事物。
  4. 在这里进行合理的讨论https://stackoverflow.com/a/5862048/593709

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多