Android中关于startActivityForResult()在activity不同启动模式下onActivityResult()的回调

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaoming100001/article/details/79802960

作为Android的开发者,关于startActivityForResult()相信大家都比较熟悉,在这里就不班门弄斧了。但是,关于startActivityForResult()在activity不同启动模式下onActivityResult()的回调有必要跟大家分享下。

1.BActivity的启动模式为standard

<activity android:name=".ui.AActivity" />
<activity android:launchMode="standard" android:name=".ui.BActivity"/>
/**
 2. AActivity逻辑比较简单,startActivityForResult跳转到BActivity
 3. 然后打印onActivityResult()回调信息
 4. 
 5. Created by XQM on 2018/4/3.
 */
public class AActivity extends BaseActivity{
    private int REQUEST_CODE = 1;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_set);
    }

    @OnClick(R.id.btn_move)
    public void onViewClicked(View view) {
        Intent intent = new Intent(this,BActivity.class);
        startActivityForResult(intent,REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == 2){
            String name = data.getStringExtra("name");
            Log.e("AActivity",name+"返回了,AActivity回调:"+"-------onActivityResult()--------");
        }
    }
}
**
 * BActivity同样非常简单
 * 
 * Created by XQM on 2018/4/3.
 */

public class BActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent();
        intent.putExtra("name","BActivity");
        setResult(2,intent);
        finish();
    }
}

这里写图片描述
B返回A结果肯定回调onActivityResult()方法

2. BActivity的启动模式为singleTop

<activity android:name=".ui.AActivity" />
<activity android:launchMode="singleTop" android:name=".ui.BActivity" />

这里写图片描述
B返回A结果同样回调onActivityResult()方法

.3. BActivity的启动模式为singleTask
大家可以先想想再看结果,猜想B返回A结果会回调onActivityResult()方法,下面认证下。

<activity android:name=".ui.AActivity" />
<activity android:launchMode="singleTask" android:name=".ui.BActivity" />

这里写图片描述
果然结果跟猜想一致,B返回A回调了onActivityResult()方法,接下来看最后一种情况。

.4. BActivity的启动模式为singleInstance

<activity android:name=".ui.AActivity" />
<activity android:launchMode="singleInstance" android:name=".ui.BActivity" />

这里写图片描述
非常震惊!onActivityResult()在activity四种启动模式下都可以回调。所以这样的题目:关于startActivityForResult()方法,如果是A跳转B,B的launchMode属性为singleInstance,A的onActivityResult()回调方法会在什么时候调用呢?
会做了吗?

猜你喜欢

转载自blog.csdn.net/xiaoming100001/article/details/79802960