Acitivity在singleTask加载模式下的数据传递处理
2015-02-28 09:54
197 查看
在Android开发中,我们通常要在不同页面之间传递数据,比如要从ActivityA启动ActivityB并传递数据到ActivityB里面,这个很简单,用Intetn加Bundle就可以了。不过有时候如果您需要让后台运行的Activity回到前台并传递数据就有些问题。
通常,我们通过Intent启到Activity的时候,就算存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。此时我们最好就是让Activity不启动多次,通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式(
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
//处理数据,data=getIntent().get.....
}
不过有的时候,系统可能会随时杀掉运行在后台的 Activity ,那么系统启动ActivityA时还会调用 onCreate 方法,而不调用 onNewIntent 方法。这个时候又怎么处理呢?通常就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法,这样就可以解决问题。
注意:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
//处理数据,data=getIntent().get.....
}
在上面这个方法中,如果没有调用setIntent(intent),则getIntent()获取的数据将不是你所期望的。所以最好是先调用setIntent(intent),这样再调用getIntent()获取数据就没问题了。
通常,我们通过Intent启到Activity的时候,就算存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。此时我们最好就是让Activity不启动多次,通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式(
android:launchmode
=
"singleTask")。singleTask的时候,启到一个ActivityA,如果系统已经存在ActivityA实例,系统就会直接启动ActivityA。然而这个时候,系统不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
//处理数据,data=getIntent().get.....
}
不过有的时候,系统可能会随时杀掉运行在后台的 Activity ,那么系统启动ActivityA时还会调用 onCreate 方法,而不调用 onNewIntent 方法。这个时候又怎么处理呢?通常就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法,这样就可以解决问题。
注意:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
//处理数据,data=getIntent().get.....
}
在上面这个方法中,如果没有调用setIntent(intent),则getIntent()获取的数据将不是你所期望的。所以最好是先调用setIntent(intent),这样再调用getIntent()获取数据就没问题了。
相关文章推荐
- Activity加载模式及数据传递
- 使用viewpager+fragment,在activity启动模式为singleTask,跳转到当前页面重新加载数据fragment数据不更新
- activity开启一个启动模式为SingleTask的activity,intent传递数据为空的解决方法
- 多个acitivity之间层层传递数据的处理
- singleTask模式下Intent传递数据问题
- JSF页面间参数的传递及加载初始化数据
- 【恢复】非归档模式下因误删除数据文件导致数据库无法OPEN的故障处理
- eval()用法 vb的数据以字符串传递给JS,如何处理(2)
- Ajax中数据传递的另一种模式:JSON
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- Windows Phone 7 MVVM模式数据绑定和传递参数
- Windows Phone 7 MVVM模式数据绑定和传递参数
- Ajax中数据传递的另一种模式:JSON
- 做了MVC模式一年,可不要把传统模式忘记呀!ashx配合aspx实现AJAX加载JSON数据
- 使用MEF模式处理silverlight中的反射加载
- 处理顶点——从XML文件加载数据
- asp.net水晶报表推模式加载报表数据代码段
- eval()用法 vb的数据以字符串传递给JS,如何处理(1)
- 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据
- 在DirectX10中不使用Effect框架处理Shader与程序间的数据传递