1、为什么要重写Application类
如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。
那么为什么这样的全局变量就不符合Android的框架架构?
众说纷纭,我理解的是static访问是无法跨进程的。Android中的Activity,Service是可以在各自进程中运行的,用static传递参数到不同进程的Activity、Service时会错。
2、如何使用重写的Application类
Application类在源码上总述这样写道:
Base class for those who need to maintain global application state. You can
provide your own implementation by specifying its name in your
AndroidManifest.xml’s tag, which will cause that class
to be instantiated for you when the process for your application/package is
created.
翻译:当我们需要保持全局变量时,使用这个类。(上文已说明,接着是如何使用这个类)
你可以通过自己取的名字,在 AndroidManifest.xml的application标签内声明并区分这个组件。声明后这个类将会在你的应用程序或者包所在的进程创建的时候,被实例化。
也就是说,使用自定义的Application类的步骤:
1)重写Application类,比如取名MyApplication。主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。
2)修改配置文件ApplicationManifest.xml,将要运行的应用程序AppContext加进去:
android:allowBackup="true"
android:name=".app.AppContext"
3)实例化自定义的Application对象
AppContext app;
app=(AppContext)getApplication();
4)对app的变量进行操作。