前言:
每个Android程序启动的时候都会创建一个Application对象,如果我们没有在程序中重新定义Application类的话,就会用默认的Application类创建对象。这个Application对象是单例对象,它的生命周期就等于这个程序的生命周期。因此我们可以在不同的activity或service中获取这个唯一的Application对象,进行一些数据的共享传递等。
如何在程序中自定义并应用Application类呢?
一、新建一个类继承Application类:
public class MyApplication extends Application {
private static int configValue;
public int getValue() {
return configValue;
}
public void setValue(int value) {
this.configValue = value;
}
}
这样,自定义的Application类就写好了,但是还要让它发挥效果才行。
二、替换原有的Application类:
在Manifest中将Application指定为我们自定义的MyApplication类。
原有的Manifest文件中,Application标签下默认是没有android:name属性的,这就表示用的是默认的Application类,加上后如下所示:
<application
android:name=".MyApplication"//这个是我们加上的
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
通过这两步操作,MyApplication类已经替换了原有默认的Application类。
下面验证效果:
在MainActivity中获取MyApplication对象,在onCreate()方法中调用此对象的setValue()方法,然后打印configValue的值,看是否set成功。
public class MainActivity extends AppCompatActivity {
MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
app = (MyApplication) getApplication();//调用Context的 getApplicationContext或者Activity的getApplication方法可以得到此应用的唯一Application对象,但是要强制转换为MyApplication对象,否则会报错。
app.setValue(3);
Log.i("test", "onCreate, v == " + app.getValue());
}
}
结果:
I/test: onCreate, v == 3
说明对configValue变量的赋值成功了。