startActivityForResult()的一些问题

1.用startActivityForResult()
启动一个singleTask任务时,系统是会立即返回结果的,onActivityResult()会收到RESULT_CANCELED,所以不要用此函数启动一个加载模式为singleTask的activity。因为当用户按下键盘上的Back键时,如果此时在前台中运行的任务堆栈顶端是一个"singleTask"的Activity,系统会回到当前任务的下一个Activity中去,而不是回到前一个Activity中。

以"singleTask"方式启动的Activity,全局只有唯一个实例存在,因此,当我们第一次启动这个Activity时,系统便会创建一个新的任务,并且初始化一个这样的Activity的实例,放在新任务的底部,如果下次再启动这个Activity时,系统发现已经存在这样的Activity实例,就会调用这个Activity实例的onNewIntent成员函数,从而把它激活起来。从这句话就可以推断出,以"singleTask"方式启动的Activity总是属于一个任务的根Activity。

但是这个是和activity的affinity有关系:

1.
设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

2.
如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。

这一段是老罗博客的,可以看下http://blog.csdn.net/luoshengyang/article/details/6714543

2.

startActivityForResult
的请求码requestCode要大于等于0才能返回结果,小于0时,onActivityResult无响应。

这也是要注意的。

时间: 2024-12-22 14:58:12

startActivityForResult()的一些问题的相关文章

startActivityForResult和setResult详解

原文:startActivityForResult和setResult详解 startActivityForResult与startActivity的不同之处在于:1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ).2.startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activit

startActivityForResult

FirstActivity: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resul

Android的startActivityForResult不起作用

之前startActivityForResult一直用的好好的,今天发现怎么也不起作用.检查后发现有两点影响了. 1.android:launchMode="singleTask",main里设成单例了: 2.startActivityForResult的requestcode须要大于0才干够.

Activity间的跳转,startActivity与startActivityForResult

JreduCh04 2016-07-30跳转 (由一个画面跳转到另一个画面)两种方法:Intent中 startActivity.startActivityForResult.后者可设置requestCode(申请码)用于获得返回值,即由一个画面传数据到多个画面(相同的数据),完成不同的功能,此时的requestCode的可通过判断来获得返回值.例:startActivity 在第一个画面中设置一个按钮,按下按钮跳转到第二个画面.lay_out中,相对布局中设置一个Button,id为bt1;

startActivityForResult的用法(Android)

1.第一个页面的activity.java package cn.buaa.z1; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatA

【转】android的startActivityForResult学习心得

http://blog.csdn.net/yanzi1225627/article/details/7800529 从昨晚到现在终于调试通了一个startActivityForResult的例子,网上要么有些说的太复杂了,要么说的含糊,搞的我走了很多弯路,所以写篇心得. 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主Activity处理.  用startActivity启动主界面是

startActivityForResult 用在于多个Activity之间传值时一些需要注意的用法

requestCode 请求码,即调用startActivityForResult() 传递过去的值 resultCode 结果码,结果码用于标识返回数据来自哪个新Activity 举个例子可能会更明白: 1.在Activity中得到新打开Activity 关闭后返回的数据 package com.google_acmer.activitys; import android.app.Activity; import android.content.Intent; import android.o

Android -- startActivityForResult和setResult

startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T

Android startActivityForResult的使用

Android startActivityForResult的使用 androidbuttonstringclass任务 在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy //看效果 //看代码 [java] view plaincopyprint? package sn.len.actres; import android.a

自定义Adapter中实现startActivityForResult的分析

最近几天在做文件上传的时候,想在自定义Adapter中启动activity时也返回Intent数据,于是想到了用startActivityForResult,可是用mContext怎么也调不出这个方法,只能调用startActivity这个方法,于是在网上搜一下,可以利用一个方式可以间接的解决这个问题,果断贴代码: Intent mIntent = new Intent(mContext,clazz);((Activity) mContext).startActivityForResult(mI