Android中的Activity是提供可视化用户界面,一个Android应用由多个Activity,多个Activity组成了Activity栈,当前活动的Activity处于栈顶。
使用Activity要继承Activity类。
Activity是有生命周期的,在说明文档中有一个生命周期说明图,我们可以看出Activity的生命周期过程:
Activity生命周期中有四种状态:
状态 描述
活动 在屏幕的前面(即在Activity栈顶),有焦点并可见,对应上图Activity Running
暂停 失去了焦点,但是它任然可见(如安装程序时的提示),对应上图onPause()
停止 失去焦点,不可见(如跳转Activity),对应上图onStop()
销毁 被系统或进程结束,对应上图onDestroy()
之前已经说过如何由一个Activity跳转到另一个Activity:
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
注意所有Activity都要在AndroidManifest.xml中注册才可以使用
那么怎么在Activity中传递数据呢?也是借助intent,另外,我们还需要用到Bundle对象,使用例子:
String name = "This is Test data"; //要传递的数据
Bundle data = new Bundle(); //建立一个Bundle对象,存储数据,这些数据使用键值对的形式传递的
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
data.putString("name",name); //向Bundlie对象中放入一个键值名称为name,数据为name变量(即"This is Test data")
intent.putExtras(data); //Bundle对象插入数据后,intent也要设置要传递哪个Bundle对象
startActivity(intent);
那么如何使用上一个Activity传送过来的数据呢?
我们要在新Activity的onCreate中建立一个intent,然后调用getExtras()获取上一个Activity传过来的Bundle,使用如下:
Intent intent = getIntent(); //获取Intent
Bundle b = intent.getExtras(); //从Intent中获取Bundle对象
String name = b.getString("name"); //获取刚刚传递过来的name的数据
有时我们需要启动Activity来获取返回来的数据,这时我们需要用startActivityForResult()来完成这个操作
在onActivityResult()中处理新Activity返回来的数据,例子如下:
//MainActivity中
private OnClickListener listener = new OnClickListener() //处理传送给下一个Activity的数据
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
String name = "This is Test data";
Bundle b = new Bundle();
b.putString("name", name);
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtras(intent);
startActivityForResult(intent, BIND_AUTO_CREATE);
}
};
protected void onActivityResult(int requestCode, int resultCode, Intent data) //处理返回来的数据
{
Bundle b = data.getExtras();
String name = b.getString("name");
}
//OtherActivity
protected void onCreate(Bundle savedInstanceState) //处理要返回去的数据
{
String name = "This is Return data";
Intent intent = getIntent();
Bundle b = new Bundle();
b.putString("name", name);
intent.putExtras(b);
this.setResult(RESULT_OK, intent);
this.finish();
}