十四、Activity

14.1Activity的启动模式
14.1.1Android下的任务桟
Android系统中的任务栈,类似于一个容器,用于管理所有的Activity实例。在存放Activity时,满足“先进后出(First-In/Last-Out)”的原则。
在这里插入图片描述
14.1.2Activity的四种启动模式
Activity的启动模式有四种,分别是standard、singleTop、singleTask和singleInstance。
在AndroidManifest.xml中,可以通过标签的android:launchMode属性设置启动模式。
①standard标准模式
standard是Activity默认的启动模式,在不指定Activity启动模式的情况下,所有Activity使用的都是standard模式。
在standard模式下,每当启动一个新的Activity,它就会进入任务栈,并处于栈顶的位置,对于使用standard模式的Activity,每次启动都会创建一个新的实例。
在这里插入图片描述②singleTop模式
singleTop启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它,不再创建新的实例。
在这里插入图片描述
③singleTask模式
当Activity的启动模式为singleTask时,每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
在这里插入图片描述
④singlelnstance模式
singlelnstance模式加载Activity时,只会创建一个Activity实例,并且使用一个全新的任务桟来装载该Activity实例。
在这里插入图片描述
14.2在Activity中如何使用Intent
14.2.1Inter介绍
1)Intent中文翻译 为“意图”,它是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
2)Intent一般用于启动Activity、启动服务、发送广播等,承担了Android应用程序三大核心组件相互间的通信功能。
Intent。
3)Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组
件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容
选择适当的组件来响应。
4)Intent启动Activity的方法有:

  • startActivity(Intent intent)
  • startActivityForResult(Intent intent,int code)

4.2.2对于向这三种组件发送intent有不同的机制
1)使用Context.startActivity() 或 Activity.startActivityForResult(),传入一个intent来启动一
个activity。使用 Activity.setResult(),传入一个intent来从activity中返回结果。
2)将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service。将intent对象传给 Context.bindService()来绑定一个service。
3)将intent对象传给 Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者
Context.sendStickyBroadcast()等广播方法,则它们被传给 broadcast receiver

4.2.3Intent的相关属性
Intent由以下各个组成部分:

  • component(组件):目的组件

Component属性明确指定Intent的目标组件的类名称。(属于直接Intent)
如果 component这个属性有指定的话,将直接使用它指定的组件。指定了这个属性以后,
Intent的其它所有属性都是可选的。

//创建一个意图对象
 Intent intent = new Intent();
  //创建组件,通过组件来响应 
  ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class); 
  intent.setComponent(component); 
  startActivity(intent);
  • action(动作):用来表现意图的行动

在Intent中,Action就是描述做、写等动作的,当你指明了一个Action,执行者就会依照
这个动作的指示,接受相关输入,表现对应行为,产生符合的输出。在Intent类中,定义了
一批量的动作,比如ACTION_VIEW,ACTION_PICK等, 基本涵盖了常用动作。加的动作
越多,越精确。
在这里插入图片描述

  • category(类别):用来表现动作的类别

一个包含Intent额外信息的字符串,表示哪种类型的组件来处理这个Intent。任何数量的Category 描述都可以添加到Intent中,但是很多intent不需要category。
在这里插入图片描述

  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
  • extras(扩展信息):扩展信息

Intent可以携带的额外 key-value 数据,你可以通过调用putExtra() 方法设置数据,每一个 key对应一个 value数据。你也可以通过创建 Bundle对象来存储所有数据,然后通过调用 putExtras() 方法来设置数据。
在这里插入图片描述

  • Flags(标志位):期望这个意图的运行模式
    在这里插入图片描述
    14.3Activity中的数据传递
    Intent不仅可以用来开启Activity,也可以在Activity之 间传递数据。在数据传递时,可以使用putExtra()方法将数据存储在Intent中。
    14.3.1页面数据传输
    1)直接发送
//发送端 
String data = "Hello Activity02"
 Intent intent = new Intent(this,Activity02.class); 
//存放数据:key-value 
intent.putExtra("extra_data",data); startActivity(intent); 
//取数据端 
Intent intent = getIntent(); 
//key 
String data = = intent.getStringExtra("extra_data");

2)Bundle

Bundle bundle = new Bundle(); 
bundle.putString("name", "Linda");
Intent intent = new Intent(this,Activity02.class); intent.putExtra(bundle); 
startActivity(intent); 
Intent intent = getIntent(); 
Bundle bundle = intent.getExtras(); 
String stuName = bundle.getString("name"); 

14.4Intent用法

  • 调用拨号程序
// 调用拨打电话,给10010拨打电话
 Uri uri = Uri.parse("tel:10010"); 
 Intent intent = new Intent(Intent.ACTION_DIAL, uri); 
 startActivity(intent); 

// 直接拨打电话,需要加上权限 <uses-permission id="android.permission.CALL_PHONE" />
Uri callUri = Uri.parse("tel:10010"); 
Intent intent = new Intent(Intent.ACTION_CALL, callUri); 
  • 发送短信或彩信
// 给10010发送内容为“Hello”的短信
 Uri uri = Uri.parse("smsto:10010"); 
 Intent intent = new Intent(Intent.ACTION_SENDTO, uri); 
 intent.putExtra("sms_body", "Hello"); 
 startActivity(intent); 
//发送彩信(相当于发送带附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra("sms_body", "Hello"); Uri uri = 
Uri.parse("content://media/external/images/media/23"); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
intent.setType("image/png"); 
startActivity(intent); 
  • 通过浏览器打开网页
  • 发送电子邮件
  • 显示地图与路径规划
  • 播放多媒体
  • 选择图片
  • 拍照
  • 获取并剪切图片
  • 打开手机应用市场
  • 安装程序
  • 卸载程序
  • 进入设置界面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值