Android中關於startActivityForResult()在activity不同啟動模式下onActivityResult()的回撥
阿新 • • 發佈:2019-01-30
作為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()回撥方法會在什麼時候呼叫呢?
會做了嗎?