何时使用而不使用android Application类?

ccp*_*zza 6 android android-context

我正在考虑使用android Application类作为存储应用程序中其他(片段)活动共享的临时状态和公共代码的地方.

我想获得更多反馈,以确定它是否适合:

  1. 共享常量,如ID,pref键名等.
  2. 反映当前UI状态,导航,选定片段以及通常不需要持久化的临时数据的全局变量(即设置者/获取者).
  3. 在触发某些条件时保留数据的挂钩.
  4. 在首选项更改后更新UI.
  5. 提供从应用程序中的任何位置访问上下文的简单方法,包括getApplication()不可用的代码,例如通过静态getter MyApp.getApp().
  6. 需要全局状态变量可见性的常用方法,如果转移到专用类会变得太麻烦.

在活动课中还有什么适合/有用/方便?什么不是一个好主意,留在它和什么是最好的选择?最后,您发现应用程序最适合您的应用程序使用?

Rag*_*ood 2

共享常量,例如 ID、首选键名称等。

我通常为此创建一个名为 C 的常量文件,因为它的可读性更好。C.SHARED_PREFS恕我直言,更容易理解Application.SHARED_PREFS

全局变量(即 setter/getter)反映当前 UI 状态、导航、所选片段以及一般不需要保留的临时数据。

这在它所涉及的 Activity 或组件中会更好(例如,Activity 的 UI 状态可能应该存储在 icicle 包中,或者在 Activity 的该实例中)。

当触发某些条件时用于持久数据的挂钩。

这应该没问题。

首选项更改后更新 UI。

同样,我觉得这在各自的组件中会更好。

提供一种从应用程序中的任何位置访问上下文的简单方法,包括 getApplication() 不可用的代码,例如通过 MyApp.getApp() 等静态 getter。

这可行,但要小心内存泄漏。当从 Activity 或 Service 等调用方法时,您通常应该将上下文作为参数传递。内存泄漏的可能性较小。

需要全局状态变量可见性的常用方法,并且这些方法会变得太麻烦而无法移至专用类。

我觉得最好是专门的课程,因为当你的应用程序的功能和大小增长时,这将变得难以维护。