【Android归纳】intent小结

来源:互联网 发布:java编程九九乘法表 编辑:程序博客网 时间:2024/05/17 07:13

    • 前言
      • 1显示启动传递数据
      • 2隐式启动
      • 3使用Bundle传递参数
      • 4以singleTask模式启动Activityintent为空的问题
      • 5其它相关

前言

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传递数据。//获取IntentIntent 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实现数据的双向传递
1 0