有个同学面试了面试官问道了SingleTask ,然后发现自己也只是看过相关文章,并没有写过测试过相关代码,所以测试一下。
<activity
android:name=".start.StartTestActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_test);
Log.e("StartTestActivity","onCreate");
findViewById(R.id.start_test).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(StartTestActivity.this,StartTestActivity.class);
intent.putExtra("time",System.currentTimeMillis());
startActivity(intent);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.e("StartTestActivity","onNewIntent,time=" + intent.getLongExtra("time",0));
}
@Override
protected void onStart() {
super.onStart();
Log.e("StartTestActivity","onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.e("StartTestActivity","onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.e("StartTestActivity","onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.e("StartTestActivity","onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("StartTestActivity","onDestroy");
}
点击按钮,依次会触发onPause,onNewIntent,onResume ,看打印
手机不小心黑屏了,然后打开手机,发现打印了
使用命令adb shell dumpsys activity 查看信息
去掉SingleTask 后,点击按钮会有Activity 的转场动画,可以感觉到创建了新的活动,并且按返回键也是要一个活动一个活动的返回。
打印为
再使用命令adb shell dumpsys activity 查看一下
通过命令adb shell dumpsys activity 可以看出确实SingleTask 模式没有重新创建StartTestActivity ,而且是先调用了onPause ,之后调用onNewIntance ,之后调用onResume 。