1.显式Intent与隐式Intent的区别
· 显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~
· 隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框~
常用情况
//1.拨打电话
// 给移动客服10086拨打电话、
权限
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
//2.打开浏览器:
// 打开百度主页
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//3.发送短信
// 给10086发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
Intent传递数据
可以传递那些数据类型?
一、8种基本数据类型(int short long byte float double char boolean)及其数组
二、 String(String实现了 Serializable )
三、实现了Parcelable的对象及其数组
四.实现了 Serializable 的对象及其数组
集合传递
- Serializable,将对象序列化成二进制数据传递
- parcelable: 这个android提供的一种新的类型,用来封装数据的容器,和Serializable相似,但是序列化的方式不同
parcelable和Serializable的区别又是什么呢?
Serializable的作用是保存对象的属性到本地文件,数据库,网络流等方便数据传输,也可程序之间传递。
parcelable的设计的目的是为了解决Serializable效率不高的问题,内存开销小,所以在内存间传递数据的方式用parcelable,缺点是不能持久化。
跳转回传
被传值方
startActivityForResult(intent, 38);请求码
@Override
protected void onActivityResult(int requestCode请求码, int resultCode返回码, Intent data) {
Bundle bundle = data.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
float weight = bundle.getFloat("weight");
Toast.makeText(MainActivity.this, name+age+weight, Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);
}
传值方
Intent data = new Intent();
data.setClass(SecondActivity.this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "张无忌");
bundle.putInt("age", 20);
bundle.putFloat("weight", 120.5f);
data.putExtras(bundle);
setResult(250, data);
finish();