Activity類onNewIntent()方法詳解
阿新 • • 發佈:2019-02-13
先找到Activity.java看看裡面的方法怎麼解釋的:
當Activity的launchMode為singleTop的時候就會進行呼叫/** * This is called for activities that set launchMode to "singleTop" in * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} * flag when calling {@link #startActivity}. In either case, when the * activity is re-launched while at the top of the activity stack instead * of a new instance of the activity being started, onNewIntent() will be * called on the existing instance with the Intent that was used to * re-launch it. * * <p>An activity will always be paused before receiving a new intent, so * you can count on {@link #onResume} being called after this method. * * <p>Note that {@link #getIntent} still returns the original Intent. You * can use {@link #setIntent} to update it to this new Intent. * * @param intent The new intent that was started for the activity. * * @see #getIntent * @see #setIntent * @see #onResume */ protected void onNewIntent(Intent intent) { }
在MainActivity.java中實現onNewIntent()方法進行測試一下:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i("onNewIntent", "onNewIntent method");
}
同時在AndroidManifest.xml中進行設定LaunchMode:
<activity android:name="com.example.wifitest.MainActivity" android:label="@string/app_name" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
測試:
啟動應用,home鍵退出後,再進入此應用:
可看到DDMS的輸出:
08-03 01:59:08.482: I/onNewIntent(25390): onNewIntent method
再使用命令進行測試:
am start -n com.example.wifitest/.MainActivity
輸出:
am start -n com.example.wifitest/.MainActivity Starting: Intent { cmp=com.example.wifitest/.MainActivity } Warning: Activity not started, its current task has been brought to the front
同時每使用命令一次,DDMS輸出結果一次
如果再AndroidMenifest.xml中去掉設定lunchermode,2種不同的命令啟動進行對比:
am start -n com.example.wifitest/.MainActivity
無輸出:
am start --activity-single-top -n com.example.wifitest/.MainActivity
每使用命令一次,DDMS輸出結果一次