前言
intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据,一般被用户启动Activity,启动Service以及发送广播等场景
1、显示启动(传递数据)
使用intent从ActivityOne跳转到ActivityTwo
在ActivityOne中的代码如下:
Intent intent = new Intent();
intent.putExtra("param1", param1);
intent.putExtra("param2", param2);
intent.setClass(ActivityOne.this, ActivityTwo.class);
startActivity(intent);
在ActivityTwo中的代码如下:
//从ActivityOne中跳转到ActivityTwo中利用Intent传递数据。
//获取Intent
Intent intent = getIntent();
String param1 = intent.getStringExtra("param1");
String param2 = intent.getStringExtra("param2");
2、隐式启动
随便举一个例子,更多相关内容不再赘述
例如启动打开网页
//访问网页。
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
3、使用Bundle传递参数
在ActivityOne中的代码如下:
//使用Bundle传递参数
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("param1",param1);
intent.putExtras(bundle);
intent.setClass(ActivityOne.this, ActivityTwo.class);
startActivity(intent);
在ActivityTwo中的代码如下:
Bundle bundle = this.getIntent().getExtras();
String param1 = myBundle.getString("param1");
4、以singleTask模式启动Activity,intent为空的问题
场景:Activity的启动模式设为:
android:launchMode="singleTask"
多次启动该Activity,又不想一直新建,调试发现intent为空。
原因:
- activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.
- 如果要启动的activity是已经存在的,这时候通过getInten()方法获取到的intent是已启动的activity的原始intent.换句话说intent的数据没有更新.
解决方案:
- 如果要每次获取intent传来的新数据就需要在onNewIntent(Intent intent)方法里调用setIntent(intent)设置这个传来的最新的intent
代码示例:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//关键代码
setIntent(intent);
//此时就可以接收最新的参数param1
String param1 = intent.getStringExtra("param1");
}
提示:
- 如果activity的启动模式是standard,那么每次都重新创建一个新的activity.这样intent也是最新的.就不用通过setIntent来更新这个intent
- 【Android归纳决】Activity启动模式
5、其它相关
- 更多隐式intent的用法
- 通过startActivityResult、onActivityResult、以及setResult实现数据的双向传递