奇怪問題 startActivityForResult() 後直接調用 onActivityResult()
開發人員都知道,可以通過使用 startActivityForResult() 和 onActivityResult() 方法來傳遞或接收參數。
然而在“輕聽”項目中,還沒等到被調用的 Activity 返回,onActivityResult() 就被執行了。
找了很久,終於通過小道訊息得知,這與 Activity 的載入模式(launchMode)有關,該屬性可以在 AndroidManifest.xml 中設定。
原先將其設為 singleInstance,經測試,所有需要傳遞或接收的 Activity 不允許設定該屬性,或只能設為標準模式,否則系統將在 startActivityForResult() 後直接調用 onActivityResult()。
調用startActivityForResult後,onActivityResult無響應的問題
兩個activity傳遞資料和返回資料時,請求方的onActivityResult始終無響應,通過debug偵錯模式也沒見調用該方法。查看了各種配置和程式碼,均未發現有錯誤之處。後面找了很多資料,總算看到一個朋友說是調用startActivityForResult的參數問題,即調用時這樣:
startActivityForResult(intent, 0);
是第二個參數的問題,該參數必須大於0才能在傳回值,並啟用onActivityResult方法。
我最開始是用的一個activity預設的常量:RESULT_OK,跟蹤了代碼後發現,該常量的值為-1,當然沒法啟用 onActivityResult方法了,隨後隨便修改為一個大於0的整數,程式即通跑成功。
startActivityForResult(intent, 1); //這樣就行了
1.startActivityForResult(Intent intent, Int requestCode);
2.setResut(int resultCode, Intent intent);
3.onActivityResult(int requestCode, int resultCode, Intent intent);
注意事項:
1.最近使用startActivityForResult,出錯,跟蹤後發現activity並沒有被啟動,而是直接執行 onActivityResult。後查看日誌發現
“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”
原來是我把要啟動的activity的launchmode設定成singleTask了。
把目標activity的launchmode去掉,正確。
總結:目標activity的launchmode不能設定成singleTask。
2.requestCode值>=0,否則,startActivityForResult就變成了 startactivity