咱们在平时的开发中,有时候可能会须要一些全局数据,来让应用中的全部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中:
在Activity中:
1 //设置分数 2 ((GameApplication)getApplication()).setScore(100) 3 4 //获取分数 5 ((GameApplication)getApplication()).getScore();
在View中:
1 ((GameApplication)getContext().getApplicationContext()).getScore()
注:post
在使用这种方式的时候可能会遇到getApplication返回null的状况,有多是调用getApplication的时机不对,若是是在类未定义完成的地方(好比变量定义部分),此时没法获得实例,因此就会出现空指针。this