> 文档中心 > Android基础#17:用于连接组件桥梁Intent的使用

Android基础#17:用于连接组件桥梁Intent的使用

    组件之间该如何进行切换?-----箴言-----

内容简介:

在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中:
 

       

(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中:
 

            

 

 


 

MSDN工具下载