1、 Activity存放于Activity栈中,当前活动的Activity位于栈顶。Activity直接或间接的继承了Context,ContextWrapper,ContextThemeWrapper等基类,可以直接调用他们的方法。 Expandable ListActivity实现可展开列表界面的Avtivity;ListActivity实现列表界面的Activity。AccountAuthenticatorActivity实现账户管理界面的Activity; TabActivity 实现TAB界面的Activity;preferenceActivity实现程序参数设置,存储界面的Acitivity,其中参数设置之后会自动永久保存到系统:data/data/<应用程序包名>/shared_prefs路径下文件名为<应用程序包名 >_preferences.xml;LauncherActivity实现Activity列表界面的Activity,单击列表项该Activity被启动。
2、 2.在AndroidManifest中配置Activity 在<application/>中添加<activity/>子元素配置activity:name:实现该Activity的类名,icon:图标,label:标签,exported:指定是否可以被其他应用调用,launcherMode:加载模式,<intent-filter>元素指定Activity可相应的Intent。
3、 3.启动,关闭Activity 应用中多个Activity只有一个入口Activity,其他Activity由入口直接或间接启动。启动方法:startActivity(Intent intent);或startActivityForRequest(Intent intent,int requestCode);requestCode用于标识请求来源,有开发者自行设置。 关闭Activity:finish();结束当前Activity 或 finish(int requestCode);结束startActivityForRequest(Intent intent,int requestCode);启动的Activity。 Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); finish();
4、 4.使用Bundle在Activity之间进行数据交换 在Activity之间Intent传递信息时可以携带需要交换的数据: put呶蓟鹭毵Extras(Bundle data) 向Intent中存放需要传输的数据包。 ------ Bundle getExtras() 取出Intent存放的数据包。 putExtra(String name,XXX value) 按key-value对的形式向Intent存入数据。 ------ getXXXExtra() 从Intent按key取出指定类型的数据。 Bundle是一个数据包,存入数据的方法: putXxx(String key,Xxx data) 向Bundle中存入Int,Long等类型数据 ------ getXxx(String key)从Bundle中取出Int,Long等各种类型数据。 putSerializable(String key,Serializable data) 向Bundle中放入了一个可序列化的对象 ------ getSerializable(String key,Serializable data)从Bundle中取出一个可序列化的对象 Person p = new Person(name.getText().toString(),passwd.getText().toString()); person类是一个DTO对象,该类实现了Serializable接口,因此person对象可实例化。 Bundle bundle = new Bundle(); 创建一个Bundle对象 bundle.putSerializable("person",p); 存入数据 Intent intent = new Intent(MainActivity.this,ResultActivity.class); 创建一个Intent intent.putExtras(bundle); intent携带bundle传输 Intent intent = getIntent(); 获取到启动该Activity的intent Person p = (Person)intent.getSerializableExtra("person"); 通过Intent取出他携带的Bundle数据包中的数据 name.setText(p.getName()); 在TextView中显示出来 passwd.setText(p.getPasswd());
5、 5.启动Activity并返回结果 用startActivit鲻戟缒男yForResult(Intent intent,int requestCode 像粜杵泳)方法来启动另一个Activity,当另一个Activity完成结果时通过setResult()方法设置处理结果,在开始Activity中重写onActivityResult(int requestCode,int resultCode,Intent intent),他在返回结果时会被触发并处理特定事件。 startActivityForResult(intent,0); 启动制定Activity并等待返回的结果,请求码为0,用于标识请求。 public void onActivityResult(int requestCode,int resultCode,Intent intent ){ if(requestCode ==0&&resultCode ==0){ 处理请求码和结果码都是0的特殊事件 Bundle data = intent.getExtras(); 取出intent中的Extras数据 String resultCity = data.getString("city"); 取出Bundle中的数据 city.setText(resultCity); } } Intent intent = getIntent(); 获取启动该Activity的Intent intent.puExtra("city",cities[m][n]); 存放数据 SelectCityActivity.this.setResult(0,intent); 设置结果码,并设置结束之后退回的Activity SelectCityActivity.this.finish();
6、 6.Activity的生命周期和启动模式 onCreate()创建时回调,onStart()启动时回调,onResume()恢复Activity,onRestart()重新启动,onPause()暂停时回调,onStop停止activity,onDestorp()销毁。 standard默认启动模式,总会为新的activity创建新实例并添加到当前Task栈中 singleTop启动的新Activity位于栈顶时,不会创建目标Activity的实例。 singleTask模式:不存在时会创建并置于栈顶,已经位于栈顶不会创建新的实例,已经存在但不在栈顶时,移出上面所有Activity。 singleinstance模式,无论从哪个Task启动目标Activity,只会创建一个实例,并用一个全新的Task栈加载该Activity。不存在时创建放于新栈中,存在则置顶。