博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android:显式Intent和隐式Intent
阅读量:4132 次
发布时间:2019-05-25

本文共 4887 字,大约阅读时间需要 16 分钟。

Intent寻找目标组件的两种方式:

  • 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
  • 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。

1.显式Intent

   一般情况下,一个Android应用程序中需要多个屏幕,即是多个Activity类,并且在这些Activity之间进行切换通过Intent机制来实现的。在同一个应用程序中切换Activity时,我们通常都知道要启动的Activity具体是哪一个,因此常用显式的Intent来实现的。

    下面的例子是在同一应用程序中MainActivity启动SecondActivity,下面的代码中,主要是为“转到SecondActivity”按钮添加了OnClickListener,使得按钮被点击时执行onClick()方法,onClick()方法中则利用了Intent机制,来启动SecondActivity,关键的代码是22~25行。

main.xml

second.xml

MainActivity.java
package com.android.test.activity;   import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;   public class MainActivity extends Activity {      private Button btn;      @Override     public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                    btn = (Button)findViewById(R.id.btn);          //响应按钮btn事件          btn.setOnClickListener(new OnClickListener() {                    @Override             public void onClick(View v) {                  //显示方式声明Intent,直接启动SecondActivity                  Intent it = new Intent(MainActivity.this,SecondActivity.class);                  //启动Activity                  startActivity(it);                        }          });      }  }
SecondActivity.java
package com.android.test.activity;   import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;   public class SecondActivity extends Activity {      private Button secondBtn;      @Override     protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.second);                    secondBtn=(Button)findViewById(R.id.secondBtn);              //响应按钮secondBtn事件          secondBtn.setOnClickListener(new OnClickListener() {                                  @Override             public void onClick(View v) {                  //显示方式声明Intent,直接启动MainActivity                  Intent intent = new Intent(SecondActivity.this,MainActivity.class);                  //启动Activity                  startActivity(intent);                            }          });      }  }
AndroidManifest.xml清单文件,16~18行为SecondActivity在清单文件里的声明

效果图:

2.隐式Intent

   下面是同一应用程序中的Activity切换的例子,需要AndroidManifest.xml中增加Activity的声明,并设置对应的Intent Filter和Action,才能被Android的应用程序框架所匹配。

MainActivity.java
package com.android.change.activity;   import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;   public class MainActivity extends Activity {      private Button btn;       @Override     public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);           btn = (Button) findViewById(R.id.btn);          // 响应按钮btn事件          btn.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View v) {                  // 实例化Intent                  Intent it = new Intent();                  //设置Intent的Action属性                  it.setAction("com.android.activity.MY_ACTION");                  // 启动Activity                  startActivity(it);               }        });        }  }
SecondActivity.java
package com.android.change.activity;   import android.app.Activity;  import android.os.Bundle;   public class SecondActivity extends Activity {       @Override     protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.second);      }  }
main.xml
seond.xml
 
AndroidManifest.xml文件的18,19行修改了Intent Filter,这样SecondActivity才能够接收到MainActivity发送的Intent。因为在MainActivity的Intent发送的动作为"com.android.activity.MY_ACTION",而在18行里,SecondActivity设置的Action也为"com.android.activity.MY_ACTION",这样就能进行匹配。

效果图:

 

 

    对于显示Intent,Android不需要再去做解析,因为目标组件很明确。Android需要解析的是隐式Intent,通过解析,将Intent映射给可以处理该Intent的Activity,Service等。Intent的解析机制主要是通过查找已经注册在AndroidManifest.xml中的所有IntentFilter以及其中定义的Intent,最终找到匹配的Intent。

转自:

转载地址:http://uajvi.baihongyu.com/

你可能感兴趣的文章
springboot dubbo统一异常处理
查看>>
dubbo 日志ID链条
查看>>
使用spring切面统计uv
查看>>
代码优化小结
查看>>
Scrapy 中 ImagesPipeline 无法执行,不起作用,图片无法下载的原因!
查看>>
”值不能为空 参数值:DataSet“的错误原因
查看>>
C#中"对于多个基表不支持动态SQL生成"的错误原因
查看>>
在64位的windows server 2003运行IIS6运行32位的.NET程序(转)
查看>>
Fedora 13播放mp3和rmvb - [操作系统]
查看>>
U盘个性化之个性图标(附autorun使用说明) 设置文件属性为系统文件 隐藏文件
查看>>
设置系统隐藏文件 + 恢复显示隐藏文件的CMD命令!
查看>>
Google Chrome OS中文版下载 支持中文输入法
查看>>
Linux下skype国内卡拨号方法
查看>>
Ubuntu 10.04开机画面低分辨率问题解决方案
查看>>
ubuntu 10.04 开机增加命令界面
查看>>
Ubuntu下安装MySQL获得 mysql.h 建立C接口
查看>>
LINUX 下的GUI编程 学习收获
查看>>
LINUX 下的 mysql + c 编程 学习收获
查看>>
linux 下的 bochs2.4.5使用的学习收获
查看>>
汇编指令收集
查看>>