- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的 Android 应用程序中,我重载了 Application 类,并更新了 list 中的标签。此应用程序还创建了一个 Android 服务。我在应用程序类的 onCreate 中放置了一些日志,我看到它被调用了两次。第一次是在我的应用程序启动时(这是预期的),然后通常是在创建服务之后。该日志还显示正在创建该应用程序的第二个实例。(我打印了“这个”值,它们是不同的)。
我认为该应用程序将创建为单例。这是因为我创建了服务吗?
最佳答案
是的,如果您使用了 android:process,那么您会在一个单独的进程中运行它,因此当服务启动时,会为其启动一个新进程,因此需要为该进程创建一个新的 Application 对象。
但是还有一个更根本的问题 - 应用程序对象启动其服务之一是不正确的。重要的是不要将应用程序与您对另一个操作系统中的“应用程序”的看法混淆。 Application 对象不驱动应用程序。它只是该过程中应用程序的全局状态。事实上,Application 对象完全是多余的——您永远都不需要它来编写 Android 应用程序。一般来说,我实际上建议人们不要使用它。它比其他任何东西都更容易引起麻烦。
另一种表达方式:真正定义应用程序的是它的 Activity 、服务、接收者和提供者标签的集合。这些就是“发射”的东西。所有应用程序都是作为初始化应用程序进程的一部分而创建的东西。它没有自己的生命周期,只是为应用程序中的其他实际组件提供服务。
因此,在设计您的应用程序时,请忽略应用程序;它会减少困惑。 (取而代之的是,我更喜欢对这种状态使用全局单例。)
此外,作为一般规则,我建议不要使用 android:process。它肯定有一些用途,但绝大多数时候不需要它,只会让应用程序使用更多 RAM,效率更低,更难编写(因为你不能在单个进程中利用全局变量) .如果您到达实际上有充分理由使用 android:process 的地方,这对您来说应该是显而易见的。
关于Android 应用程序类被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947052/
我是一名优秀的程序员,十分优秀!