关于Activity

Android 四大组件

  • Activities –管理应用程序展示
  • Services – 管理后台服务
  • Broadcast receivers – 接收广播通知信息,并作出处理
  • Content Provider – 管理数据共享,内容提供者

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。

你可能感兴趣的:(android,应用)