四大组件之Activity

来源:互联网 发布:一个能看网络攻击网站 编辑:程序博客网 时间:2024/05/30 23:24

Vista安卓系列——Activity

1.Activity的生命周期

这个不再做过多的阐述,贴图即可。

2.Activity的跳转

Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity。
Activity的跳转可分为显示和隐式两类:通过设置Activity的包名和类名实现跳转,称为显式意图跳转;通过指定动作实现跳转,称为隐式意图跳转。

显式意图跳转

适用于跳转到同一个应用下的不同Activity

    Intent intent = new Intent();    intent.setClass(this, OtherActivity.class);    startActivity(intent);

隐式意图跳转

隐式意图用于启动不同应用中的Activity。如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统会显示一个对话框,列出所有匹配的Activity,由用户选择启动哪一个。

  • 隐式跳转到打电话

    我们看到系统源码的OutgoingCallBroadcaster的Activity在清单文件里做了如下的配置:

    <intent-filter>        <action android:name="android.intent.action.CALL" />        <category android:name="android.intent.category.DEFAULT" />        <data android:scheme="tel" /> </intent-filter>

下面我们要设置与之相匹配的Intent:

    Intent intent = new Intent();    intent.setAction(Intent.ACTION_CALL);    intent.setData(Uri.parse("tel:10086"));    startActivity(intent);


  • 隐式跳转到浏览器

同样, 我们看到系统源码的BrowserActivity在清单文件里做了如下的配置:













下面我们同样设置与之相匹配的Intent:

    Intent intent = new Intent();    intent.setAction(Intent.ACTION_VIEW);    intent.setData(Uri.parse("http://www.hao123.com"));    startActivity(intent);

3.Activity的启动模式

Activity有四种启动模式,即为任务栈处理activity不同的方法

standard

遵循栈先进后出的原则。

singleTop

如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
如:当targetActivity在栈顶,当用户还要再次启动targetActivity时,栈不会有变化。

singleTask

当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空。保证整个任务栈里面只有一个实例存在。
如:任务栈由底层开始分别是MainActivity,TargetActivity。若此时再次启动MainActivity(启动模式是singleTask)则栈内只剩下了MainActivity。

singleInstance

activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在。当我们启动其中一个activity时,携带这个activity的任务栈就会跑到前台。

4.Activity跳转时的数据传递

Activity启动时,可以通过Intent对象的携带数据到目标Activity

    Intent intent = new Intent(this, TargetActivity.class);    intent.putExtra("name", "Vista");    intent.putExtra("age", 18);    startActivity(intent);

目标Activity获取Intent携带的数据

    Intent intent = getIntent();    String name = intent.getStringExtra("name");    int age = intent.getIntExtra("age", 0);
1 0
原创粉丝点击