有一个很少使用、称为Application的第五种组件。该组件是由清单文件中的application节点元素表示的。除非使用android:name属性提供自定义的Application类,否则系统将使用默认的。
application节点元素包含多种重要的属性。其中一些属性提供了应用程序的额外功能,有些则仅供参考。下面会介绍一些笔者认为比较重要的属性:
<application android:label="@string/app_name" android:description="@string/app_description" android:icon="@drawable/app_icon" android:name=".MyApplication" android:backupAgent=".MyBackupAgent" android:largeHeap="false" android:process="com.aaptl.sharedProcess"> <!-- activity、service、receiver和provider定义在这里 --></application>用户可能安装了成百个不同的应用,如果开发者能提供尽可能多的应用程序信息将会有很大帮助。建议把android:label和android:description属性都设置成本地化值(即能翻译成多种语言)。description属性还应包含描述应用程序功能的更详细的文字,这样,用户在设置页看到应用就知道应用是做什么的。
最终,用户会更换手机,他们希望能够把所有的应用,包括数据都迁移到新设备上。幸好谷歌提供的一个备份服务可以帮助解决这个问题,但需要开发者在清单文件中声明并且实现自己的备份代理。只需使用android:backupAgent属性,并指向实现备份代理功能的类即可。第9章会详细介绍备份代理,最好总是从一开始就提供该功能以免以后忘记。
如果正在构建一个需要大量内存的应用程序,开发者很快就会发现Dalvik虚拟机默认的堆大小将不能满足要求。可在应用清单文件中添加android:largeHeap属性,让系统知道应用程序需要更多的内存来解决这个问题。然而,除非确实需要,否则不要这样做。因为这样会浪费资源,而且系统会更快地终止应用程序。对大多数应用来说,该属性是没有必要的,应该避免使用。
如果有应用程序套件共享同一个用户ID(如之前manifest节点元素描述的),通过设置android:process属性为同一个值,可强制这些应用共享同一个进程。这有助于减少应用程序资源的使用,但是如果其中一个应用崩溃可能导致所有应用都受影响。如果开发者有一个支持从Google Play安装插件的应用,最有可能会出现这种情况。注意:要使用同一个进程,所有的应用必须共享同一个用户ID且用同一个证书签名。
最后,可以使用android:theme属性设置整个应用的主题(在application节点元素中)或者单个Activity的主题。