【Android归纳】intent小结
2016-02-01 16:27
405 查看
前言
1显示启动传递数据
2隐式启动
3使用Bundle传递参数
4以singleTask模式启动Activityintent为空的问题
5其它相关
在ActivityOne中的代码如下:
在ActivityTwo中的代码如下:
例如启动打开网页
在ActivityTwo中的代码如下:
多次启动该Activity,又不想一直新建,调试发现intent为空。
原因:
activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.
如果要启动的activity是已经存在的,这时候通过getInten()方法获取到的intent是已启动的activity的原始intent.换句话说intent的数据没有更新.
解决方案:
如果要每次获取intent传来的新数据就需要在onNewIntent(Intent intent)方法里调用setIntent(intent)设置这个传来的最新的intent
代码示例:
提示:
如果activity的启动模式是standard,那么每次都重新创建一个新的activity.这样intent也是最新的.就不用通过setIntent来更新这个intent
【Android归纳决】Activity启动模式
通过startActivityResult、onActivityResult、以及setResult实现数据的双向传递
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传递数据。 //获取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实现数据的双向传递
相关文章推荐
- Android工具类—Android Studio实用插件
- Android手动回收bitmap,引发Canvas: trying to use a recycled bitmap处理
- 浅谈Android应用的内存优化及Handler的内存泄漏问题
- Android BitmapFactory.decodeStream方法OutOfMemoryError 解决方法
- Android中IntentService的原理及使用
- Android sd卡状态监听,文件搜索,媒体文件刷新
- Android中IntentService与Service的区别
- 编译android源代码(aosp)
- Android EventBus 的项目使用
- 自学Android 坑1
- 下拉刷新、上拉加载更多控件实现原理及解析(二)
- 下拉刷新、上拉加载更多控件实现原理及解析(一)
- 实现键盘弹出时,显示Emoji按钮的功能
- android APK加固篇-1. 动态加载的Dex文件的生成
- ViewPager实现导航
- android:简单计算器
- Android 大牛 国内、国外Android开发者博客
- Android开发之Activity
- android客户端通过servlet对数据库操作(图文)
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程