由於項目是單Activity多fragment實現的,做極光推送處理的時候要求點擊通知欄,跳轉到消息那個fragment,我們知道在推送裏面通過重寫BroadcastReceiver通過bundle拿到值設置跳轉的,很遺憾,那個Activity一直是在前臺的,並且啓動模式是:singleTask結果即便我的intent是:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
依然不行,最後通過查資料發現:
在Activity裏面重寫onNewIntent方法這樣變可以拿到intent傳遞的值,方法如下:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//需要注意的是:直接調用該方法的intent而不是通過getIntent()來取
}
雖然比較簡單但是遇到挺棘手的,在這裏記錄一下。看了下這個onNewInten方法:
處理onNewIntent()來通知片段管理器沒有保存狀態。如果您正在處理新的意圖,並且可能要更改片段狀態,那麼一定要先調用這裏的超類。否則,如果您的狀態被保存,但是活動沒有停止,那麼您可能會得到一個onNewIntent()調用,它發生在onResume()之前,並且在那時嘗試執行fragment操作將拋出IllegalStateException,因爲fragment管理器認爲狀態仍然被保存。