1. 程式人生 > >Activity類onNewIntent()方法詳解

Activity類onNewIntent()方法詳解

先找到Activity.java看看裡面的方法怎麼解釋的:

    /**
     * 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) {
    }
當Activity的launchMode為singleTop的時候就會進行呼叫

在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輸出結果一次