其中,Application域在应用程序的任何地方都可以使用和访问
Android中的全局对象非常类似于JavaWeb中的Application域,除非Android应用程序清楚内存,否则全局对象将一直可以访问。
案例:
创建MainActivity、OtherActivity和MyApplication
MyApplication:
packagecom.example.application;
importjava.util.HashMap;
importandroid.app.Application;
//应用程序启动时,最先创建的是Application,并执行onCreate方法
publicclassMyApplicationextendsApplication{
//通过Map集合保存需要传递的数据,这样可以减少成员变量的创建。
privateHashMapmap=newHashMap();
publicHashMapgetMap(){
returnmap;
}
publicvoidsetMap(HashMapmap){
this.map=map;
}
//Activity可以通过getApplication()方法获取Application对象。
//但是,并不是所有的类都有getApplication()方法获取Application对象,所以需要在MyApplication内部单例化instance供其它使用和访问。
privatestaticMyApplicationinstance;
publicstaticMyApplicationgetInstance(){
returninstance;
}
@Override
publicvoidonCreate(){
super.onCreate();
this.instance=this;
}
}
MainActivity:
publicclassMainActivityextendsActivity{
privateButtonbtn_tiaozhuan;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_tiaozhuan=(Button)findViewById(R.id.btn_tiaozhuan);
btn_tiaozhuan.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,OtherActivity.class);
//方式一:
Activity可以通过getApplication()直接获取Application
//MyApplicationapp=(MyApplication)getApplication();
//方式二:
通过在MyApplication里面封装的方法获取MyApplicationMyApplicationapp=MyApplication.getInstance();
app.getMap().put("data1","王二");
app.getMap().put("data2","张三");
startActivity(intent);
}
});
}
}
OtherActivity:
publicclassOtherActivityextendsActivity{
//方式一:
Activity可以通过getApplication()直接获取Application
//MyApplicationapp=(MyApplication)getApplication();
//方式二:
获取MyApplication
MyApplicationapp=MyApplication.getInstance();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
Log.d("OtherActivity",(String)app.getMap().get("data1"));
Log.d("OtherActivity",(String)app.getMap().get("data2"));
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
//清楚集合数据,否则占用内存
app.getMap().remove("data1");
app.getMap().remove("data2");
}
}
配置:
android:
allowBackup="true"
//指定创建的MyApplication,默认情况下穿件Application
android:
name="com.example.application.MyApplication"
android:
icon="@drawable/ic_launcher"
android:
label="@string/app_name"
android:
theme="@style/AppTheme">
android:
name="com.example.application.MainActivity"
android:
label="@string/app_name">
name="android.intent.action.MAIN"/>
name="android.intent.category.LAUNCHER"/>
name="com.example.application.OtherActivity"/>
Activity返回数据
创建三个Activity,分别是:
MainActivity:
主体页面,接收弹出页面返回的数据页面
描述:
设置三个按钮通过点击弹出Activity,并接收处理返回的数据结果
按钮1和按钮2:
弹出同一个ResultActivity页面,但是他们传递的请求码不同,用来标识按钮一和按钮二的数据处理。
按钮1/2和按钮3:
分别弹出ResultActivity和NewActivity页面,这两个请求码,可以不区分,但是从两个页面传回了不同的结果码,这样就可以知道返回的数据来至哪个页面,并作出相应的处理。
ResultActivity:
弹出页面,返回结果数据
描述:
用于测试同一个按钮弹出同一个页面返回数据处理(测试请求码)
NewActivity:
弹出页面,返回结果数据
描述:
和ResultActivity搭配测试弹出不同页面返回数据处理(测试结果码)
MainActivity页面:
privateEditTextet_phoneNumber;
privateButtonbtn_selectLianxiRen;
privateEditTextet_phoneNumber2;
privateButtonbtn_selectLianxiRen2;
privateEditTextet_showContent;
privateButtonbtn_getContent;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//三个文本框用于赋值
et_phoneNumber=(EditText)findViewById(R.id.et_phoneNumber);
et_phoneNumber2=(EditText)findViewById(R.id.et_phoneNumber2);
et_showContent=(EditText)findViewById(R.id.et_showContent);
//按钮一点击事件
btn_selectLianxiRen=(Button)findViewById(R.id.btn_selectLianxiRen);
btn_selectLianxiRen.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,ResultActivity.class);
//第二个参数(resultCode---请求码)
startActivityForResult(intent,1);
}
});
//按钮二点击事件
btn_selectLianxiRen2=(Button)findViewById(R.id.btn_selectLianxiRen2);
btn_selectLianxiRen2.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,
ResultActivity.class);
//第二个参数(resultCode---请求码)
startActivityForResult(intent,2);
}
});
//按钮三点击事件
btn_getContent=(Button)findViewById(R.id.btn_getContent);
btn_getContent.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,
NewActivity.class);
//第二个参数(resultCode---请求码)
startActivityForResult(intent,0);
}
});
}
/*所有Activity返回的数据结果都是onActivityResult方法接收并处理
*requestCode:
请求码用于标识请求源(请求码一般用于区分本页面不同按钮处理结果)
*resultCode:
结果码用于标识结果源(结果码一般用于区分Activity返回的处理结果)
*请求码和结果码就是一个标识作用,程序员自己设置,只要能区分就可以。
*data:
返回数据(Intent类型)
*/
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//必须对返回数据作出判断,否则当Activity中直接点击返回按钮的时候,data值为null此时不做处理会报异常。
if(data==null)return;
//获取返回数据
Bundlebundle=data.getExtras();
StringphoneNumber=bundle.getString("phone");
//判断请求码,可以知道是哪个按钮点击,并作出相应的处理
switch(requestCode){
case1:
et_phoneNumber.setText(phoneNumber);break;
case2:
et_phoneNumber2.setText(phoneNumber);break;
}
//判断结果码,可以知道数据源来至哪里
if(resultCode==500){
et_showContent.setText(bundle.getString("content"));
}
}
ResultActivity页面:
publicclassResultActivityextendsActivity{
privateTextViewtv_phone1;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
//按钮点击返回数据结果
tv_phone1=(TextView)findViewById(R.id.tv_phoneNumber1);
tv_phone1.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent();
intent.putExtra("phone",tv_phone1.getText().toString());
//第一个参数(resultCode----结果码)
setResult(0,intent);
finish();//关闭(销毁)Activity
}
});
}
}
NewActivity页面:
publicclassNewActivityextendsActivity{
privateTextViewtv_content;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
//按钮点击返回数据结果
tv_content=(TextView)findViewById(R.id.tv_content);
tv_content.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){