既然我可以通过注册activity生命周期回调的方法在任意地方获取到最后一个onresume的activity,
那么我是否可以创建一个工具类,工具类利用这个activity来构造dialog呢?
这样做有什么坏处呢?
我现在用一个toast工具类,在工具类中直接使用了application的context,这样做可以吗?
巴扎黑2017-04-18 09:18:44
可以是可以,但為什麼要這麼做?封裝個dialog工具類傳activity就行了。至於toast,用applicationContext是一個不錯的做法。
天蓬老师2017-04-18 09:18:44
構造Dialog直接把Activity的context傳過去就可以了呀,不需要你整回調啥的這麼麻煩的。你可以參考下別人封裝的工具庫,看看別人的思路。
PHP中文网2017-04-18 09:18:44
原本系統層級的dialog是很方便的只需要傳入applicationContext就可以實現一個彈框,但是由於各個廠商的過度定制(我遇到小米對系統級別的彈框定制令人噁心,同一個版本,更新一次實現就修改一次),所以最好還是如上面所有的可以用一個定制dialog格式的activity作為彈出框來實現,目前很多家都是這樣的,像tencent的信鴿推送也就是這樣做的,能保證成功開啟而不受定制之苦。
天蓬老师2017-04-18 09:18:44
安卓的Dialog,不管怎麼樣你都要傳Context。傳 Activity 其實也就等於傳了 Context。利用Application的Context是不行的;再者,static的Context是不建議的,有可能會造成記憶體洩漏。
不過你可以透過依賴注入等方法來隱藏或簡化這一過程。
巴扎黑2017-04-18 09:18:44
不能(雖然我想表示不建議)
建設你已經實現了,我們猜一下這樣會發生什麼.
網路請求發出去了,然後頁面被結束,但是請求沒有取消.請求返回時彈了一個對話框.這個Dialog怎麼解釋?如果這Dialog後續有操作,操作有數據,這些處理的代碼放在哪裡?也行你成功把這些資料放在Dialog實例裡,還new了一個內部類別.那麼恭喜,剛剛被結束的Activity記憶體洩漏了
一個萬能的Dialog,怎麼限制人去使用?可以在任何地方彈,程式碼結構還能維護?
小專案,直接根據需求抽個BaseActivity,處理好程式碼結構彈個對話框也沒多麻煩.理由不充分.