Android 四大组件
Activity 通过Intent进行通信,在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。
典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT 等。
动作对应的数据则以URI 的形式进行表示。
intent 是一个有效的做某事的请求,intentfilter 则用于描述一个activity(或者IntentReceiver)能够操作哪些intent,IntentFilter 需要在AndroidManifest.xml 中定义。当向前导航时,activity 将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。
AndroidManifest文件中含有如下过滤器的Activity组件为默认启动类当程序启动时系统自动调用它
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
启动新的Activity
<一>不传参数
startActivity(new Intent(MainActivity.this, NewActivity.class));
<二>
Intent intent = new Intent(MainActivity.this,NewActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "tom");
bundle.putInt("age", 4);
intent.putExtras(bundle);
startActivity(intent);
新Activity接收数据
Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
若需在Activity中得到新打开Activity 关闭后返回的数据,需使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity 传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode,Intent data)方法:
@Override
startActivityForResult (new Intent(MainActivity.this,NewActivity.class),1);//第二个参数为请求码,可以根据业务需求自己编号
//第一个参数为请求码,即调用startActivityForResult()传递过去的值 第二个参数为结果码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getExtras().getString(“result”));//得到新Activity 关闭后返回的数据
}
当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:
Intent intent = new Intent();//数据是使用Intent返回
intent.putExtra(“result”, “hello”);//把返回数据存入Intent
NewActivity.this.setResult(RESULT_OK, intent);//设置返回数据
NewActivity.this.finish();//关闭Activity
Activity生命周期:【重要数据写在OnPause(),最后一个安全生命周期方法】
android.app.Activity类:因为几乎所有的活动(activities)都是与用户交互的,所以Activity类关注创建窗口,可以用方法setContentView(View)将自己的UI放到里面。然而活动通常以全屏的方式展示给用户,也可以以浮动窗口或嵌入在另外一个活动中。有两个方法几乎所有的Activity子类都实现:
onCreate(Bundle):
初始化活动(Activity),例如完成一些图形的绘制。最重要的是,在这个方法里通常将用布局资源(layout resource)调用setContentView(int)方法定义你的UI,和用findViewById(int)在你的UI中检索你需要编程地交互的小部件(widgets)。 setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后进行相关操作,操作会被包装成为一个意图,然后这个意图对应有相关的activity进行处理
。
onPause():
处理当离开活动时要做的事情。用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。
@Override
在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。 例如,
public void onCreate(Bundle savedInstanceState){…….}
这种写法是正确的, 若写成
public void oncreate(Bundle savedInstanceState){…….}
这样编译器会报如下 错误—
The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method
以确保正确重写onCreate方法
若不加@Override,则编译器将不会检测出错误,会认为你新定义了一个方法oncreate。