1. 程式人生 > >OnNewIntent 的呼叫,SingleStask 單例模式的Activity 當遇到新的Intent的時候,不會走onCreate方法了

OnNewIntent 的呼叫,SingleStask 單例模式的Activity 當遇到新的Intent的時候,不會走onCreate方法了

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   processExtraData();
 }


 protected void onNewIntent(Intent intent) {
   super.onNewIntent(intent);
   setIntent(intent);//must store the new intent unless getIntent() will return the old one
   processExtraData()
 }


 private void processExtraData(){
   Intent intent = getIntent();
   //use the data received here
 }

OnNewIntent 的呼叫:

單例模式(SingleStask )的Activity 當遇到新的Intent的時候,

單頂模式(singleTop)

 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);//原先已經存在這個即將跳到的Activity;

延伸---可以使用這個標誌進行重新整理Intent,進而重新整理當前介面

不會走onCreate方法了,

而是走OnNewIntent方法,接著是生命週期其他方法;

<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"/>

所以在處理的是時候,OnNewIntent 的常用方法,是和OnCreate方法一樣。

@Override
protected void onNewIntent(Intent intent) {
MyLog.d(TAG, TAG+"______ onNewIntent 0"+getIntent().getBooleanExtra(ComConstants.isAllowedSendVoiceMsg, isAllowedSendVoiceMsg));
MyLog.d(TAG, TAG+"______ onNewIntent 0-1"+intent.getBooleanExtra(ComConstants.isAllowedSendVoiceMsg, isAllowedSendVoiceMsg));
setIntent(intent);//注意  是設定的是intent  

不是設定getIntent()
MyLog.d(TAG, TAG+"______ onNewIntent 1"+getIntent().getBooleanExtra(ComConstants.isAllowedSendVoiceMsg, isAllowedSendVoiceMsg));
super.onNewIntent(intent);
MyLog.d(TAG, TAG+"______ onNewIntent 2"+getIntent().getBooleanExtra(ComConstants.isAllowedSendVoiceMsg, isAllowedSendVoiceMsg));
}