1. startActivity的工作過程
調用startActivity之后會傳遞到操作系統(tǒng)的ActivityManager中去,之后
ActivityManager會啟動另一個activity。
2. 啟動活動與傳遞數據
用startActivityForResult啟動的Activity要用finishActivity(int requestCode)函數去銷毀
-
startActivityForResult的用法
- 調用startActivityForResult(Intent intent,int requestCoed),其中Intent是啟動第二個activity的意圖,requestCoed是用來在onActivityResult()回調中區(qū)分是什么時候啟動,以及啟動的是哪個Activity的。
Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivityForResult(intent,1);
- 被啟動的Activity可以調用setResult(int resultCode,Intent data)方法給啟動它的Activity返回數據(包裹在Intent中)
Intent intent = new Intent(); intent.putExtra("data_return","Hello MainActivity"); setResult(RESULT_OK,intent);
- 啟動Activity實現(xiàn)onActivityResult()回調,獲取數據
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 1: if(resultCode == RESULT_OK){ Log.i(TAG, "onActivityResult: result:"+data.getStringExtra("data_return")); } } }
被啟動的Activity獲取啟動它的Activity傳來的數據,只需要調用getIntent()方法獲取到啟動自己用到的Intent,然后調用Intent的getXXX()方法獲取即可。
Bundle是什么?
Bundle是用來存儲數據的一種集合,采用鍵值對的形式,通常用在Intent傳遞數據過程中,存儲數據