天天看點

Android使用 startActivityForResult 、 onActivityResult 時的注意事項

今天使用 startactivityforresult 時遇到兩個問題,應該是常見問題了吧,浪費了些時間才搞定,做個記錄。

1. onactivityresult 的觸發順序問題

這個問題很郁悶,我一開始的設計是 

mainactivity -> loginactivity -> onactivityresult  (通知已登入成功相關 ui 更新)

結果卻是剛進入 loginactivity 時就觸發了 onactivityresult  事件,導緻 resultcode 始終為 0 ,為這個問題郁悶了半天

mainactivity.java

loginactivity.java

後來谷歌一番之後,找到了問題所在,是 onactivityresult 和 androidmanifest.xml 中 activity 的 launchmode 配置有沖突造成的。

解決辦法:

需要傳回 result 的 activity 不能使用:

甚至有人說 singletop 也會沖突,那就隻好用預設的 standard 了,至于原理我沒空深入去研究了。

經試驗,設定為預設的 standard 後确實就正常了,暫時就這樣解決吧。

2. 執行 finish() 後出現錯誤提示 activity has leaked window com.android.internal.policy.impl.phonewindow

Android使用 startActivityForResult 、 onActivityResult 時的注意事項

這是因為在執行 finish 釋放一個 activity 時,還有一些依賴于該 activity 的控件沒有關閉造成的,我這裡是因為 dialog 隻是執行了一下 hide() 方法,使用 dismiss() 一下就ok了

繼續閱讀