android基础篇(开篇),浅谈android组件通讯之intent

一,概述

intent(意图)是android组件之间通讯的桥梁,通过它可以在程序中启动Activity,Service,发送广播,可以实现不同组件之间的数据传递

意图的类型有两种
  • 显示意图

当你知道将要通过意图启动的组件如Activity或者Service的类名时候,你可以通过intent的显示意图启动对应的组件

  • 隐示意图

当你不知道要启动组件的具体名称的时候,当你知道你要要启动组件的动作的时候,你可以通过给intent指定动作(Action)来启动相应可以完成该动作的组件,这个时候你并不知道启动的组件具体是哪一个组件(Activity,Service或者Broadcast),这就好比你要吃午饭,你知道今天要吃黄焖鸡米饭,但是你不知道去哪里可以吃到黄焖鸡米饭。那么你就可以叫一个出租车,然后跟他说,你要吃黄焖鸡米饭,叫他带你到可以吃到黄焖鸡米饭的饭店,那么你可以吃上黄焖鸡米饭了。

intent的属性

  • Component
  • Action
  • Category
  • Data
  • Type
  • Extra
  • flag

下面通过一个例子浅谈intent的属性

我来打一个比方,也是现实生活中经常遇到的事情,比如说,我们开了店,我们得告诉别人我们这里是饭店还是五金店,还有我们的店比如饭店,我们只是得要有一个招牌菜吧,在这基础之上我们可以为我们的饭店起个名字叫Component,我们可以告诉顾客,我们饭店只供吃饭(action)吧,不给睡觉,那就为我们至少的一道招牌菜起名叫category,你的饭店招牌菜可以有很多,当至少得有一道招牌菜叫做android.intent.category.DEFAULT,当然我们饭店只有米饭吃可能没有顾客来我们饭店吃饭,为了彰显我们饭店的出色,我们可以为我们饭店买各种食材(data),还有我们可以为我们饭店指定口味,比如说是清淡的还是辛辣的,这个时候产生一个问题了,如果我们饭店要清淡的口味,那么我们买食材的时候就得考虑买的颜料会不会导致我们的菜的口味变成辛辣的了,所以当我们指定我们了饭店的口味的时候,那么我们买的食材就不能是随便买了,得符合那种口味才行,或者当我们就想买某种食材的时候,我们或许得改一改我们饭店的口味了,那么当我们既想要某种食材,又要清淡的口味的时候,我们就得去买符合这种口味的又能彰显我们饭店的高贵的食材,当然我们可以为我们要买的食材策划(scheme)要什么口味(type)的,去哪个地方(host)的哪条街(path)的哪个菜市场(port)买。

就拿上面我们的饭店来说,我们可以为我们饭店能够为更多的顾客提供不同的口味,提供不同的菜,以便可以满足更多的顾客的需求。这个时候我们可以为我们的饭店添加各种intent-filter了

二,如何启动activity,service, broadcast

显示启动

还是那上面的例子来说,假如我们现在是顾客了,我们要到饭店吃黄焖鸡米饭,如果我们知道附加有家饭店叫做黄焖鸡米饭,我们可以直接跟出租车死机说我们要到黄焖鸡米饭吃饭,那么我们就可以到达那家饭店吃饭了,用代码表示如下:

Intent intent = new Intent(this,黄焖鸡米饭.class);
startActivity(intent);
Intent intent = new Intent(this,黄焖鸡米饭.class);
startService(intent);
当然上面只是简单的显示启动特定组件的方法,我们还可以其他方式启动

隐示启动

还是上面的例子我们今天要吃黄焖鸡米饭,我们并不知道这附近有可以吃到黄焖鸡米饭的饭店,这个时候,我们可以跟出租车司机说,我们要吃黄焖鸡米饭,这个时候司机也许知道这附近有很多家饭店有黄焖鸡米饭,那么他就会问你,想去哪家,给你一些附近的饭店,然后由你选择。

简单的代码描述:

Intent intent = new Intent();       
intent.setAction(Intent.ACTION_VIEW);
// intent.setData(uri);
// intent.setType(type);
// intent.setFlags(flags);
startActivity(intent);

启动Service和启动Activity类似,更多的启动方法请查看android官方api文档

启动组件的其他方式,将在下篇博客对专门的组件进行描述的时候会说明,本篇博客先对intent进行简单的理解,下面对intent点的Flag属性和Extra属性进行个人的简单理解

还是拿上面去饭店吃饭的例子来说,当我们要到饭店吃饭的时候,我们可以带上家里的筷子,或者勺子,然后到饭店用我们自己带的筷子,勺子吃饭了,当然我们可以为我们去饭店吃饭添加一些控制,比如15分钟吃完哈(Flag),那么15分钟后你就得吃完啦。
用代码描述上面的过程:

Intent intent = new Intent(this,黄焖鸡米饭.class);
intent.addFlags(15分钟吃完);
intent.addFlags(吃的不爽就回家);
intent.putExtra("筷子", "筷子");
intent.putExtra("勺子", "勺子");
startActivity(intent);

好了,写了有些时间了,上面对intent及其属性的理解全是我个人的理解,如果有什么理解不对的地方,欢迎指出。

你可能感兴趣的:(intent)