android start activity getIntent 返回異常的問題

       前兩天在寫android應用的時候發現一個詭異的現象,我使用startActivity的時候往intent中傳遞了一些extra參數,但是在目標activity中getIntent的時候發現從intent裏面拿不出我之前放進去的參數,最初以爲是設置的問題,但試過了各種方法都不奏效,陷入迷茫中。於是google了一下相關的文章,發現一個有意思的分享一下。

       在一個activity的生命週期中,它getIntent得到的intent都是第一次啓動這個activity的時候拿到的intent。也就是說如果一個activity在按home隱藏之後,如果再使用start activity傳遞一個intent進去,那麼這這個activity裏面get的時候返回的仍然是第一次的那個intent。不是很理解android爲什麼這樣做,不過倒也發現了一個解決方案,那就是使用onNewIntent.

       在activity中重載onNewIntent,這個方法的傳入參數是一個intent,這就是新傳入進來的intent,然後在onNewIntent的方法裏面調用setIntent方法,將獲取到的intent手動傳遞給activity,這樣在後續的getIntent中就可以拿到新的intent了。值得一提的是,onNewIntent 方法可以保證在onResume之前被調用,所以getIntent的方法也最後在onResume裏面使用。另外onNewIntent註釋裏寫的針對singleTop這樣的launchMode使用的,實際上對於singleInstance 和singleTask這樣的launchMode也是可用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章