2 qq 21504369 qq_21504369 于 2016.01.20 21:20 提问

Activity通过startActivityForResult()启动自身,singleTop失效

问题焦点:设置活动启动模式singleTop失效

场景:一个activity通过button监听跳转到自身
原因:跳转时启动活动的方法是startActivityForResult()

换成startActivity()就正常。

想问的问题:当前的活动应该是在栈顶的啊,为什么点击button之后又去新创建了一个活动实例?
startActivityForResult()是在当前活动的onCreate()方法中的button的监听事件里调用的,这个方法只是在销毁活动之前给上一个活动传递数据,对活动的生命周期有影响吗?
singleTop模式没起作用,应该就是当前活动不在栈顶,和startActivityForResult()有什么冲突?百度没查到

代码附上:
FirstActivity.java

public class FirstActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.d("FirstActivity","Task id is " + getTaskId() +this.toString());
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.first_layout);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                Intent intent = new Intent(FirstActivity.this,FirstActivity.class);
                startActivityForResult(intent,1);
//              startActivity(intent);
            }
        });
    }


}

AndroidManifest.xml

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".FirstActivity"
            android:launchMode="singleTop"
            android:label="This is FirstActity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.20 22:13
qq_21504369
qq_21504369 谢谢,这个有看到过,我知道startActivityForResult()的正确用法,我只是想问问我这样不正确的写是哪里触发的错误?
2 年多之前 回复
qq_15771061
qq_15771061   2016.01.22 14:10

对,使用SingleTop或者SingleInstance的方式启动的Activity来说,调用startActivityForResult()系统
直接返回Activity.RESULT_CANCELED而不会再去等待返回

Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.20 21:43

singletop就是在栈顶不创建

qq_21504369
qq_21504369 回复晨风晓梦: 已回答,注意查收
2 年多之前 回复
qq_33804558
qq_33804558 能不能帮我解决一下我的问题,在下一页,和这个问题差不多,安卓中onActivityResult方法无法获取返回的resultCode和data问题,求解
2 年多之前 回复
qq_21504369
qq_21504369 我想问问为什么不在栈顶了?startActicityForResult()对活动在不在栈顶有什么影响吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
一种轻量级解决startActivityForResult启动Activity导致singleTop模式失效
Android中,如果要屏蔽用户手抖一下子点开两个相同的activity,可以将activity设置为singleTop模式或者singleTask模式,但是当activity的使用startActivityForResult方式启动,onAvtivityResult会立即返回RESULT_CANCEL,导致singleTop模式或者singleTask模式失效,这样会导致当用户启动activit
探究startActivityForResult在singleTop和singleTask启动模式讨论
最近在研究AMS代码遇到一个问题,在函数startActivityUncheckedLocked中 Slog.d("DDY", "!!!!!!!!!!!!!!!!!!!" ); if (r.packageName != null) { // If the activity being launched is the same as the one cur
Activity的启动模式与startActivityForResult的关系
Activity的启动方式分为四种,分别为standard,singleTop,singleTask,singleInstance startActivityForResult方法能够起效:standard和singleTop startActivityForResult方法不能够起效:singleTask和singleInstance 1、只要将被启动的Activity属性设置为singl
在使用startActivityForResult时设置的SingleTop不起作用
【转载请注明出处:From李诗雨—http://blog.csdn.net/cjm2484836553/article/details/77972725】 不诗意的女程序猿不是好厨师~ 问题描述: 今天在使用startActivityForResult启动activity时,发现当过快点击Button时,会弹出很多个Activity页面,查看功能清单文件发现是设置了启动模式为SingleTo
startActivityForResult 无效问题
问题:两个Activity  A和B,从A跳到B,使用startActivityForResult,B结束后,A没有进入onActivityResult、 发现:launchMode导致。 B的launchMode为singleInstance或singleTask会出现该问题,设置为standard后不出现该问题了。 另外  http://blog.csdn.net/djx12
启动一个启动模式为singleTop的activity
Activity 有一个 onNewIntent(Intent intent)回调方法 This is called for activities that set launchMode to “singleTop” in their package, or if a client usedthe Intent.FLAG_ACTIVITY_SINGLE_TOP flag when calling s
android:Activity启动模式之singleTop
先看一下singleTop启动模式的说明: 可以有多个实例,但是不允许此Activity的多个实例叠加。即,如果此Activity有实例在栈顶的时候,启动这个Activity,不会创建新的实例而会调用其OnNewIntent方法,如果不在栈顶则创建新的实例 下面我们通过一个实例来仔细了解 首先是xml布局文件,共两个按钮 <RelativeLayout xmlns:android="htt
Android的SingleTask,SingleInstance和StartActivityForResult冲突问题
Android的SingleTask和StartActivityForResult冲突问题首先回顾下Android的四种启动模式: standard( 标准模式 ):每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否存在,并且它会进入启动者所在的栈中。 singleTop(栈顶复用模式): 如果新的Activity已经位于所在任务栈的顶部,则此Activity不会被重新创建 ,若
启动Activity的两种方式startActivity和startActivityForResult(一)
启动Activity有两种方式: 1,startActivity(Intent intent);启动其他Activity 2,startActivityForResult(Intent intent,int requestCode):以指定指定的请求码(requestCode)启动Activity,并且程序将会等到新启动Activity的结果(通过重写onActivityResult()方法来
Android活动Acitivity启动模式之singleTop
在文章Android活动Acitivity启动模式之standard中,介绍了活动的默认启动模式standard