版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
作为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()回调方法会在什么时候调用呢?
会做了吗?