先找到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输出结果一次