组件之间该如何进行切换?-----箴言-----
内容简介:
在Android系统中,应用程序的3个核心组件(活动、服务和广播接收器) 都是通过Intent来激活的。
或者说,当这些组件中的一个组件向另外一个组件转换的时候,就可以通过Intent来实现。
本篇介绍Intent相关概念和使用方法。
什么是Intent?
Intent最简单最常用的作用就是用于界面的切换。
Intent描述了组件想做什么
Intent(意图) 本身是一个包含被执行操作抽象描述的被动的数据结构。
Intent 在 Android 的官方 API 文档中是这样描述的:It is a passive data structure holding an abstract description of an operation to be performed. 它是一种数据结构,抽象描述一次将要被执行的操作,其作用是在程序运行过程中连接两个不同的组件。
从某种意义上说,Intent也是一种事件处理机制,在Android系统中,这里的事件被称为Intent(意图)。
Intent的数据结构:
Intent 对象通常使用六个主要组成部分来抽象描述的请求信息,它们是组件名称,行为,数据 / 数据类型,类别,附加信息和标示位:
Intent 对象使用组件名称描述传递消息的目标组件。这种明确指定目标组件名称的 Intent 称之为显式 Intent,系统会将显式 Intent 直接发送给目标组件。由于显式 Intent 需要指定目标组件,所以其更多的使用在应用内部组件间消息的传递。
传递Intent的几种场景:
在Android系统中, 存在如下几种不同的机制来传送Intent到每种组件中:
(1) 一个Intent对象传递给Context startActivity() 或Activty.startActivityForResult()以启动一个活动,
或者让一个存在的活动去做某些新的事情。
(2) 一个Intent对象是传递给Conext.startService() 来发起一个服务或者递交新的指令给运行中的服务。
可以发起这个服务。
(3) 一个Intent对象可以传递给任意广播方法,所有对此感兴趣的广播接收者都可以处理该Intent。
Intent的过滤:
Intent Filter(Intent过滤器)可以进行Intent的过滤。
Intent Filter描述了组件能处理什么事情。通过解析Intent可以进行组件间的切换。
使用Intent Filter有如下两个好处。
(1) Activities仅发出一个Intent请求, 便能重用其他组件的功能;
(2) Activities可以随时被替换为有等价Intent Filter的新Activity。
Intent使用举例:
(1)Activity之间的跳转:
startActivity(new Intent(MainActivity.this, NextActivity.class));
(2)Activity启动Service:
在MainActivity中:
Intent intent = new Intent("com.example.apptest.START_SERVICE");
startService(intent);
MyService.java的实现:
package com.example.apptest;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"------> onCreate");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "------>onDestory");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "------>onBind:" + intent);
return null;
}
}
在AndroidManifest.xml中:
<service android:name=".MyService">
<intent-filter>
<action android:name="com.example.apptest.START_SERVICE" />
</intent-filter>
</service>
(3)Activity发送广播:
在MainActivity中:
private void sendCast() {
Intent intent = new android.content.Intent("MyApp.SEND_ACTION");
intent.putExtra("data",123);
sendBroadcast(intent);
}
广播接收器MyBroadcastReceiver.java的实现:
package com.example.apptest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
int data = extras.getInt("data");
// 处理data数据
Log.i(TAG, "MyBroadcastReceiver==data=" + data);
}
}
}
在AndroidManifest.xml中:
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
<action android:name="MyApp.SEND_ACTION" />
</intent-filter>
</receiver>
本文详细介绍了Android系统中Intent的概念及其使用方法。Intent作为一种重要的组件间通信机制,可用于活动、服务及广播接收器之间的交互。文章通过实例展示了如何使用Intent在不同组件间进行数据传递和控制流程。
375

被折叠的 条评论
为什么被折叠?



