Application类
application是应用程序中除了activity之外的另一个context,顾名思义,它就像是“应用程序”本身。因此,它拥有与应用程序相同的生命周期,并且拥有对全局资源的访问权限,此外它还可以监控Activity的声明周期。
Application类的注册
一个应用程序只能有一个application实例,默认情况下会自动创建一个。如果要自己编写一个,就需要让一个类继承Application,并且在androidmanifest文件中为application添加android:name
属性:
1 | public class App extends Application { |
android:name
设置为自己编写的类名。
1 | <application |
这样,应用程序就会以App类作为Application实例。
利用Application获取/传递全局资源
由于Application也是Context的一种,因此它也可以解析R文件中的内容。例如在res/values/strings.xml中添加:
1 | <string name="qaq">qaq</string> |
就可以使用Application直接进行访问,首先定义getApp()
方法:
1 | private App getApp() { |
然后在Activity中调用,可以看到解析全局资源呈现出来的内容。
1 | textView.setText("资源字符串的内容是: " + getApp().getString(R.string.qaq)); |
另一种方法是利用应用程序只有一个application,并且每个activity都可以通过调用getApplicationContext()
获得application的特性,在App类中添加字段。
1 |
|
上述代码添加了字段textData和它的访问器与修改器,可以在IDEA或AS中通过code->generate->getter and setter来自动生成,注意鼠标光标必须位于类定义的大括号内,否则generate可能只有copyright选项
接下来,可以编写两个activity,在一个activity中设置,启动另一个activity,再在另一个activity中显示。这部分内容就是之前讲过的了:
在MainActivity.java中:
1 |
|
在MainActivity2.java中:
1 |
|
Application生命周期
启动应用程序时,首先创建Application并调用其onCreate()
方法。关闭程序时,如果在虚拟环境下会回调onTerminate()
方法。注意,Application的onCreate比Activity的onCreate先被调用,这个特性使得Application的onCreate成为初始化内容的好时机。
在应用的运行过程中,Application还有如下几个生命周期:onLowMemory()
,onTrimMemory()
,onConfigurationChanges()
,分别对应于低内存、内存清理和配置改变,程序可以做相应的资源释放和布局改变来响应这些事件。
从多个Activity启动应用程序
可以让两个Activity在AndroidManifest中都包含下列内容
1 | <intent-filter> |
这样会为应用程序生成两个图标,分别从不同的Activity启动。
不知道有什么用(