android中应用类的目的是什么?

Application类的目的究竟是什么? 将其扩展到自定义子类有什么好处为什么使用它? 全局variables是否可以存储在任何其他类中实现与应用程序相同的目标?

谢谢,

Solutions Collecting From Web of "android中应用类的目的是什么?"

很好的问题!

您的应用程序是在您的活动和服务正在运行时始终运行的上下文。

这也是第一个被创造和最后被破坏的环境。 因此,它围绕着你的应用程序的生命周期。

您可以使用应用程序类来共享数据或组件(例如用于dependency injection)。 例如,如果你想在活动之间共享一个单例,你可以在应用程序类中创build实例并提供一个getter,那么所有其他的上下文都可以通过单例获得

((cast to your class)getApplicationContext()).getFoo(); 

可能有一些用例需要在启动第一个活动之前执行,然后在应用程序类的onCreate方法中执行。

另一方面,你永远不应该调用Application类的onDestroy方法,因为它不总是被调用。 Android上没有合约。

但是这很less见,通常你不需要重写应用程序类。 例如RoboGuice或Dagger可以通过其他方式实现dependency injection。

两件事情使这个类非常有用:

  1. 应用程序类在任何其他Activity之前被实例化。
  2. 它拥有应用程序上下文

上下文为我们带来了大量的资源:我们可以找出一些设备属性,加载一些资源,启动一个SQLite数据库等等。

所有这些都在任何Activity加载之前发生,并且所有这些都是活动全局可用的。

我的意思是简单的例子:

 public class App extends Application{ private static Resources sResources; //--I want to load strings resources from anywhere-- public static String loadStringResource(int resID) { return sResources.getString(resID); } @Override public void onCreate() { super.onCreate(); sResources = getResources(); //---I want to load all preferences when my app starts--- PreferenceManager.setDefaultValues(this,R.xml.prefs,false); } } 

扩展Application类允许您集成到应用程序的生命周期中。

这对于存储全局应用程序级别的信息也很有用(尽pipe保持活动“独立”通常是很好的做法)

Application类意识到应用程序上下文,并在应用程序加载时加载,因此它在应用程序生命周期中保持适当的callback,然后才能开始活动。 你很可能不想扩展这个类。

从API文档:

通常不需要子类Application。 在大多数情况下,静态单例可以以更模块化的方式提供相同的function。 如果你的单例需要一个全局上下文(例如注册广播接收者),那么检索它的函数可以被赋予一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext()。

http://developer.android.com/reference/android/app/Application.html