1. 程式人生 > >Android中關於startActivityForResult()在activity不同啟動模式下onActivityResult()的回撥

Android中關於startActivityForResult()在activity不同啟動模式下onActivityResult()的回撥

作為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()回撥方法會在什麼時候呼叫呢?
會做了嗎?