`

startActivityForResult 和 startActivity

阅读更多

首先说下这个问题的情景:

当前的软件有一个主Activity A1 并且从A1可以跳转到A2 A3两个界面 而A2 A3也可以回退到A1 同时在这之间 需要传递一些数据

第一种做法是:

 

Intent intent=new Intent(A1.this,A2.class);
//给intent通过setExtra等方法设置要传递的信息
startActivity(intent);

 

 

在A2中可以通过getIntent()方法将信息取出来

同理,A2回退到A1 也一样

 

也就是A1和A2之间互相startActivity

 

但是在学习的过程中 发现Activity的跳转还存在另外一个方法startActivityForResult

以A1跳转A2为说明

启动方式没有改变 只是将startActivity改为startActivityForResult

 

而此时从A2回到A1 就不需要再次调用startActivity了,而是采用

Intent intent=new Intent();

//同样在intent中放置需要传递的信息
setResult(RESULT_CODE, intent); //RESULT_CODE是一个int值 用于父界面区分
finish(); //关闭自己 一定要执行这句话

  此时由于子窗口关闭 父窗口就被显示出来,为了取得需要传递的那些值,还需要在父窗口中复写一个重要方法onActivityResult

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
	}

  其中就可以根据resultCode来进行不同的操作了

 

 

最后 两者之间又有什么区别呢

default的startActivity的LaunchMode如果在多次反复跳转的情况下 产生多个A1 A2的实例(LaunchMode包括standard,SingleTop,SingleTask,SingleInstance4种)这可能并不是我们期望的

 

当然还有一个问题 如果采用互相跳转 同时又采用SingleTask的mode 两者之间是不是就相等了。。至少从我的理解来看 是相同的 但是在这样的情况下 觉得startActivityForResult会更方便一些

0
0
分享到:
评论
3 楼 cookiejj2010 2011-12-31  
carlosk 写道
startActivityForResult在sigleTask模式下是无法使用的.

但经常会有一些Activity需要设置为sigleTask,并且还需要有拍照,找相册等等类似的需求,这样就很难协调.

我觉得这是Android API的一个不完善的地方.


的确 在SingleTask下 onActivityResult方法在最初就被执行了 而真正返回的时候却没有执行
2 楼 carlosk 2011-12-31  
startActivityForResult在sigleTask模式下是无法使用的.

但经常会有一些Activity需要设置为sigleTask,并且还需要有拍照,找相册等等类似的需求,这样就很难协调.

我觉得这是Android API的一个不完善的地方.
1 楼 zhongxinhu 2011-12-30  
mark!

相关推荐

    Android多屏显示-StartActivity

    在StartActivity时,合理利用Intent传递数据,并确保布局和资源能在各种屏幕尺寸下正常显示,才能打造优秀的多屏应用。同时,理解并掌握Android的生命周期管理和Activity之间的交互,将有助于提高应用的质量和用户...

    startActivityForResultDemo

    此外,记得在不需要新Activity返回结果时,使用`startActivity`而不是`startActivityForResult`。 通过`startActivityForResult`,Android应用可以实现灵活的交互和数据共享,极大地丰富了用户体验。理解并熟练掌握...

    StartActivityForResult小例子

    Intent intent = new Intent(StartActivity.this, SecondActivity.class); ``` #### 步骤2:启动Activity并设置请求码 使用`startActivityForResult`启动被启动的Activity,同时传入请求码。 ```java ...

    startActivityForResult的详细用法

    2. 如果目标Activity不能返回结果,可以在调用`startActivity`而不是`startActivityForResult`,以避免不必要的处理。 3. 在`onActivityResult`中,务必检查请求码和结果代码,以确保正确处理返回的结果。 4. 为了...

    Android AOSP 6.0.1 常规startActivity启动流程分析

    在Android应用开发中,`startActivity`方法是用于在不同Activity之间进行切换的关键操作。当一个Activity想要启动另一个Activity时,通常会通过调用`startActivity`并传递一个`Intent`来实现。在这个过程中,一系列...

    Android中Intent的详解(显式,隐式,系统,startActivityForResult);

    startActivity(intent); ``` ### 2. 隐式Intent 隐式Intent不直接指定目标组件,而是通过设定Action、Data、Category等元数据来描述一个操作,然后系统会遍历所有注册过的Intent Filter,找到最适合处理这个Intent...

    ActivityForResult实现Activity回调

    `startActivityForResult()`和`onActivityResult()`是Android开发中的重要机制,它们提供了`Activity`间的数据通信和流程控制,特别是在需要回调的情况下,如登录、选择图片等。理解和熟练掌握这两个方法对于构建...

    Android4.0入门之Activity返回参数

    Activity返回参数和传值区别:传参调用startActivity(intent)执行跳转,返回参数用startActivityForResult(intent, 1)方法,还需从写onActivityResult()方法,它是负责初始化回传参数的方法。

    安卓Android源码——(Activity跳转与操作).rar

    然后,调用`startActivity`或`startActivityForResult`启动Activity。这两个方法都位于`Context`类中,但它们的区别在于`startActivityForResult`允许你在新的Activity执行完特定任务后返回结果。在源码中,`start...

    Android功能代码

    startActivity(intent); Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_SETTINGS);//管理应用程序界面 context.startActivity(intent); 或者用以下方法(3.0以前的版本可以用此方法) ...

    android-start-activity.7z

    4. **启动Activity**: 创建Intent后,你需要调用`startActivity()`或`startActivityForResult()`来启动Activity。前者仅仅启动Activity,而后者用于启动一个需要返回结果的Activity。 5. **Activity生命周期**: 当...

    android-页面跳转-Activity&Intent详解,Bundle类介绍说明.doc

    显式 Intent 是通过明确指定要启动的 Activity 的类名来实现的,例如:`startActivity(new Intent(MainActivity.this, NewActivity.class))`。 隐式 Intent 是通过指定要执行的操作来实现的,例如:`startActivity...

    Android带有返回值的finish(StartActivityForResult)

    `StartActivityForResult`的工作原理是这样的:当一个Activity(我们称之为A)启动另一个Activity(B)时,可以使用`startActivityForResult()`方法而不是普通的`startActivity()`. 在B中执行完某些操作后,可以通过...

    startActivityForResult用法实例

    总结,`startActivityForResult()`是Android应用中进行Activity间通信的重要工具,它允许你在启动新的Activity的同时获取返回的结果,极大地增强了应用的交互性和功能。通过理解其用法并结合实际项目需求,可以灵活...

    startActivityForResult

    这时,我们可以用`startActivityForResult`启动一个新的Activity来完成这些任务,而不是简单地用`startActivity`,因为后者不会提供返回结果。 `startActivityForResult`方法有两个参数: 1. `Intent`:这是一个...

    Activity启动流程图

    它在Activity的启动过程中起到了重要的作用,特别是在调用startActivity方法后,它会检查是否使用了startActivityForResult方法,因为这会影响到启动流程中的一些行为,比如结果返回。 2. ActivityManagerService ...

    ActivityForResult实例源代码

    在Android应用开发中,`startActivityForResult()` 是一个非常重要的方法,它允许我们在启动一个Activity时传递请求,并期待从这个启动的Activity返回结果。这个方法是Android组件间通信(IPC,Inter-Process ...

    androidInter

    本主题将深入探讨`androidInter`,特别是`startActivityForResult`和`startActivity`这两个与`Intent`相关的API。 首先,让我们了解`Intent`的基本概念。`Intent`是一种消息传递对象,用于在Android应用程序的不同...

    基于android startActivityForResult的学习心得总结

    首先,理解`startActivityForResult`的核心概念:当我们需要在启动一个新Activity时获取返回值,就需要使用`startActivityForResult`而不是`startActivity`。通过`startActivityForResult`,我们可以启动一个新的...

Global site tag (gtag.js) - Google Analytics