Android中Intent和Activity跳转

Android Intent

Android应用程序由Activity、Service、Content、Bordercast Receiver 和Content Provider等组件组成。

除了Content Provider外,Activity、Service和Bordercast Receiver这些组件之间的调用都是通过Intent实现的。

Intent是一种消息机制,通过将Intent对象传递给Context.startActivity()方法或Activity.startActivityForResult()方法启动一个本地Service对象,如被传递给Context.bindService()则连接一个远程Service对象。传递给Context.sendBroadcast()等方法调用Broadcast Receiver。

显示Intent(Explicit Intent)

通过指定目标组件名字,寻找目标组件 ,一般应用与调用程序和目标组件在同一个应用中。

隐式Intent(Implicit Intent)

通过指定Intent Filter寻找目标组件,一般情况下调用程序与目标组件不在同一个应用中。

隐式Intent请求没有指定目标组件的类名,它是通过Intent Filter对象告诉调用者如何能够昭告匹配的目标组件规则

隐式Intent需要在AndroidManifest.xml中注册Intent Filter

<activity android:name=".LoginActivity">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Intent Filter: IntentFilter对象描述目标组件如何响应隐式Intent。

尝试同时在AndroidManifest.xml中设置两个Intent Filter

Activity之间的跳转

也适合于 Service和 Broadcast Receiver目标组件。多个组件之间数据传递是通过 Intent实现的, Intent在组件之间传递数据主要使用 Intent的 Extras字段。

Intent对象有很多的 putExtrad(…)方法,通过“ key-value”对的方式把数据放置到 Extras对象中。下面的语句是将 userid控件的内容,按照 userid键放入到 Intent对象的 Extras中。

Activity1:

Intent it = new Intent(Activity1.this,Activity2.class);
it.putExtra("userid", userid.getText().toString());
startActivity(it);

Activity2:

Bundle bundle = this.getIntent().getExtras();
String userid = bundle.getString("userid");

上面讲述的两个 Activity跳转都是第一个 Activity调用 startActivity()方法启动第二个Activity,然后在第二个 Activity调用 Context. finish方法实现返回到第一个 Activity。

跳转与返回

有的时候业务需求很复杂,从第二个 Activity返回到第一个 Activity时,需要再次处理某些事情就要使用 startActivityForResult()方法启动第二个 Activity了,并在第一个 Activity中重写onActivityResult()方法。

posted @ 2021-01-05 00:18  VanGy  阅读(260)  评论(0编辑  收藏  举报