咱们在平时的开发中,有时候可能会须要一些全局数据,来让应用中的全部Activity和View都能访问到,你们在遇到这种状况时,可能首先会想到本身定义一个类,而后建立不少静态成员,不过android已经为咱们提供了这种状况的解决方案,下面就来介绍一下:html


     在Android中,有一个名为Application的类,咱们能够在Activity中使用getApplication(),方法来得到,它是表明咱们的应用程序的类,使用它能够得到当前应用的主题,资源文件中的内容等,这个类更灵活的一个特性就是能够被咱们继承,来添加咱们本身的全局属性。例如咱们在开发一个游戏应用,须要保存分数,那么咱们就能够继承Application,代码以下:android

 1 public class GameApplication extends Application {   2     private int score;   3        4     public int getScore() {   5         return score;   6     }   7     public void setScore(int score) {   8         this.score = score;   9     }  10 }

这样咱们就扩展了本身的属性,不过尚未结束,另一个比较关键的一步,是须要在androidManifest.xml文件中将咱们扩展后的Application类指定上去,例以下面的代码:app

 
1 <application 2 android:name=".GameApplication" 3 android:icon="@drawable/icon" 4 android:label="@string/app_name">
这样指定好以后,咱们的自定义Application就算完成了,而后咱们能够很方便的在任何Activity和View中来获取咱们的分数属性,代码以下:

在Activity中:
1 //设置分数  2 ((GameApplication)getApplication()).setScore(100)  3   4 //获取分数  5 ((GameApplication)getApplication()).getScore();
在View中:
1 ((GameApplication)getContext().getApplicationContext()).getScore()


注:post

在使用这种方式的时候可能会遇到getApplication返回null的状况,有多是调用getApplication的时机不对,若是是在类未定义完成的地方(好比变量定义部分),此时没法获得实例,因此就会出现空指针。this