、很多情况下,我们需要多个组件之间进行数据的共享。Context可以作为全局共享信息的桥梁。
. 新建一个APP 类, 继承自 Application
. 去AndroidManifest.xml 中配置信息
// android:name=".App" 通过这种方式我们就自定义Android 的Application
//application 才是真正的全局上下文对象。
<application
android:name=".App"
//通过 getApplicationContext 方法 就可以获取到application 的全局对象
//实现一个全局共享的数据 在App 类中写。
getApplicationContext();
. 创建Main2 配置文件
<activity android:name=".MainActivity" android:label="Main1">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Main2" android:label="Main2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
效果,是生成两个 APP ,着两个Activity 都可以启动当前的应用 Main1 启动的Main1 ,Main2启动的是Main2
2、是现实数据共享
//执行保存的操作
findViewById(R.id.main1_save_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//在执行保存的时候,首先要获得Application,它的类型是app 我们自定义的类,通过它setTextData,保存到全局Context里面
((App)getApplicationContext()).setTextData(et.getText().toString());
//在访问tv.setText() - 同样的代码写到Main2中
tv.setText("共享的数据是:"+ et.getText().toString());
}
});
通过这种方式,这两个类都有了保存数据到application里面,都有读取application 里面数据的信息的能力。
tv.setText("共享的数据是:"+ getApp().getTextData());
//首先getApp() 方法。
public App getApp(){
return (App) getApplicationContext();
}
总结:在多个Activity 里面,我们可以使用,Application 来进行数据的共享,Application 对同一应用程序里面它是唯一的,在实际开发中常用。(同一应用程序可以有多个主Activity)
3、Application 的声明周期:
1>我们需要在程序被启动的时候,肯定会执行一些初始化操作,是否意味着有多少个入口我们就得写多少次代码? 肯定不是, 我们可以给这个应用程序配置一个自定义Application,然后在这个Application 的声明周期里面,来进行操作。
.
/**
* 创建的时候 会被执行 有创建就会有结束
* Application 的onCreate 会比Activity 的onCreate 先执行
* 很方便我们做一些初始化操作
* 不管启动的那个Activity ,Application 的onCreate 会首先执行
*/
@Override
public void onCreate() {
super.onCreate();
System.out.println("App onCreate");
}
/*onTerminate 一般情况下是不会执行的,只会在模拟环境下执行*/
@Override
public void onTerminate() {
super.onTerminate();
System.out.printf("App Terminate");
}
/*在低内存执行 - 一般情况下执行不了*/
@Override
public void onLowMemory() {
super.onLowMemory();
}
/*onTrimMemory 程序在执行内存清理的时候回执行*/
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
}
/*配置发生改变的时候会执行*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}