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