Android 复习-Activity

Android 复习


Activity Git地址

1 Activity的生命周期 和启动模式(launchMode)

Activity 的主要生命周期可以通过LifeCycleObserver来监听,主要有:

interface FullLifecycleObserver extends LifecycleObserver {

    void onCreate(LifecycleOwner owner);

    void onStart(LifecycleOwner owner);

    void onResume(LifecycleOwner owner);

    void onPause(LifecycleOwner owner);

    void onStop(LifecycleOwner owner);

    void onDestroy(LifecycleOwner owner);
}

Activity 的默认启动模式为 standard,一共有四种分别是 standard ,singleTop,singleTask,singleInstance.

1.1 基本生命周期

一般的生命周期活动如下:
MainActivity standard,SecondActivity standard。

// 1. 启动 MainActivity
20-03-29 17:41:48.648 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:41:48.652 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:41:48.653 16756-16756 I/MainActivity: event: ON_RESUME

// 2. 点击按钮跳转到 SecondActivity
2020-03-29 17:42:01.330 16756-16756 I/MainActivity: event: ON_PAUSE
2020-03-29 17:42:01.363 16756-16756 I/SecondActivity: event: ON_CREATE
2020-03-29 17:42:01.366 16756-16756 I/SecondActivity: event: ON_START
2020-03-29 17:42:01.367 16756-16756 I/SecondActivity: event: ON_RESUME
2020-03-29 17:42:01.889 16756-16756 I/MainActivity: event: ON_STOP

// 3.1 按返回键
2020-03-29 17:42:15.788 16756-16756 I/SecondActivity: event: ON_PAUSE
2020-03-29 17:42:15.830 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:42:15.831 16756-16756 I/MainActivity: event: ON_RESUME
2020-03-29 17:42:16.334 16756-16756 I/SecondActivity: event: ON_STOP
2020-03-29 17:42:16.338 16756-16756 I/SecondActivity: event: ON_DESTROY

// 4.息屏
2020-03-29 17:42:30.987 16756-16756 I/MainActivity: event: ON_PAUSE
2020-03-29 17:42:31.005 16756-16756 I/MainActivity: event: ON_STOP

// 5 点亮屏幕
2020-03-29 17:45:22.122 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:45:22.123 16756-16756 I/MainActivity: event: ON_RESUME

第3步 时返回的时候,直接返回到上次的 MainActivity

1.2 设置 SecondActivity parentActivityName = MainActivity

第一、二步操作不变,第三步点击 toolbar 上面的 箭头。

// 1. 启动 MainActivity
20-03-29 17:41:48.648 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:41:48.652 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:41:48.653 16756-16756 I/MainActivity: event: ON_RESUME

// 2. 点击按钮跳转到 SecondActivity
2020-03-29 17:42:01.330 16756-16756 I/MainActivity: event: ON_PAUSE
2020-03-29 17:42:01.363 16756-16756 I/SecondActivity: event: ON_CREATE
2020-03-29 17:42:01.366 16756-16756 I/SecondActivity: event: ON_START
2020-03-29 17:42:01.367 16756-16756 I/SecondActivity: event: ON_RESUME
2020-03-29 17:42:01.889 16756-16756 I/MainActivity: event: ON_STOP
// 3.2点击Toolbar 中 <- 箭头
2020-03-29 17:49:08.995 16756-16756 I/SecondActivity: event: ON_PAUSE
2020-03-29 17:49:09.007 16756-16756 I/MainActivity: event: ON_DESTROY
2020-03-29 17:49:09.039 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:49:09.042 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:49:09.042 16756-16756 I/MainActivity: event: ON_RESUME
2020-03-29 17:49:09.526 16756-16756 I/SecondActivity: event: ON_STOP
2020-03-29 17:49:09.527 16756-16756 I/SecondActivity: event: ON_DESTROY

由此可以看出 <- 返回到 MainActivity时,实际是先销毁了MainActivity ,然后重新创建了MainActivity。

2 启动模式
2.1 将secondActivity的启动模式设置为 standard

standard 启动模式:每次调用StartActivity(Intent)时,都会创建一个新的对象。
两个Activity的测试日志

// 1. 启动 MainActivity
20-03-29 17:41:48.648 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:41:48.652 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:41:48.653 16756-16756 I/MainActivity: event: ON_RESUME

// 2. 点击按钮跳转到 SecondActivity
2020-03-29 17:42:01.330 16756-16756 I/MainActivity: event: ON_PAUSE
2020-03-29 17:42:01.363 16756-16756 I/SecondActivity: event: ON_CREATE
2020-03-29 17:42:01.366 16756-16756 I/SecondActivity: event: ON_START
2020-03-29 17:42:01.367 16756-16756 I/SecondActivity: event: ON_RESUME
2020-03-29 17:42:01.889 16756-16756 I/MainActivity: event: ON_STOP

// 3.3 进入 SecondActivity 后点击 跳转到 SecondActivity
2020-03-29 18:06:28.163 17717-17717 I/SecondActivity: event: ON_PAUSE
// 创建了一个新的 SecondActivity 
2020-03-29 18:06:28.199 17717-17717 I/SecondActivity: event: ON_CREATE
2020-03-29 18:06:28.202 17717-17717 I/SecondActivity: event: ON_START
2020-03-29 18:06:28.203 17717-17717 I/SecondActivity: event: ON_RESUME
2020-03-29 18:06:28.695 17717-17717 I/SecondActivity: event: ON_STOP

结果如图:

MainActivity
SecondActivity
SecondActivity

三个Activity的测试结果:

// 1. 启动 MainActivity
20-03-29 17:41:48.648 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:41:48.652 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:41:48.653 16756-16756 I/MainActivity: event: ON_RESUME

// 2. 点击按钮跳转到 SecondActivity
2020-03-30 10:38:51.741 23679-23679 I/MainActivity: event: ON_PAUSE
2020-03-30 10:38:51.781 23679-23679 I/SecondActivity: event: ON_CREATE
2020-03-30 10:38:51.784 23679-23679 I/SecondActivity: event: ON_START
2020-03-30 10:38:51.785 23679-23679 I/SecondActivity: event: ON_RESUME
2020-03-30 10:38:52.316 23679-23679 I/MainActivity: event: ON_STOP
// 3 跳转到 ThreedActivity
2020-03-30 10:38:58.001 23679-23679 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:38:58.041 23679-23679 I/ThreeActivity: event: ON_CREATE
2020-03-30 10:38:58.044 23679-23679 I/ThreeActivity: event: ON_START
2020-03-30 10:38:58.045 23679-23679 I/ThreeActivity: event: ON_RESUME
2020-03-30 10:38:58.537 23679-23679 I/SecondActivity: event: ON_STOP
// 4 跳转到 SecondActivit(startActivity(Intent))
2020-03-30 10:38:59.655 23679-23679 I/ThreeActivity: event: ON_PAUSE
2020-03-30 10:38:59.697 23679-23679 I/SecondActivity: event: ON_CREATE
2020-03-30 10:38:59.700 23679-23679 I/SecondActivity: event: ON_START
2020-03-30 10:38:59.701 23679-23679 I/SecondActivity: event: ON_RESUME
2020-03-30 10:39:00.201 23679-23679 I/ThreeActivity: event: ON_STOP

结果如图:

MainActivity
SecondActivity
ThreeActivity
SecondActivity
2.2 将SecondActivity的启动模式设置为 singleTop

singleTop 表示如果Activity在栈顶,启动时复用原有的Activity,如果不是在栈顶,创建新的Activity

两个Activity的测试日志

// 3 进入 SecondActivity 后点击 跳转到 SecondActivity
2020-03-29 18:05:08.431 17576-17576 I/SecondActivity: event: ON_PAUSE
2020-03-29 18:05:08.432 17576-17576 I/SecondActivity: event: onNewIntent
2020-03-29 18:05:08.433 17576-17576 I/SecondActivity: event: ON_RESUME

结果如图:

MainActivity
SecondActivity

SecondActivity 设置为 singleTop 的时候不会创建新的实例,并且会调用 onNewIntent

三个Activity的测试日志

// 1. 启动 MainActivity
2020-03-30 10:42:31.524 24581-24581 I/MainActivity: event: ON_CREATE
2020-03-30 10:42:31.528 24581-24581 I/MainActivity: event: ON_START
2020-03-30 10:42:31.530 24581-24581 I/MainActivity: event: ON_RESUME
// 2. 点击按钮跳转到 SecondActivity
2020-03-30 10:42:37.011 24581-24581 I/MainActivity: event: ON_PAUSE
2020-03-30 10:42:37.057 24581-24581 I/SecondActivity: event: ON_CREATE
2020-03-30 10:42:37.061 24581-24581 I/SecondActivity: event: ON_START
2020-03-30 10:42:37.062 24581-24581 I/SecondActivity: event: ON_RESUME
2020-03-30 10:42:37.574 24581-24581 I/MainActivity: event: ON_STOP
// 3 跳转到 ThreedActivity
2020-03-30 10:42:38.313 24581-24581 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:42:38.353 24581-24581 I/ThreeActivity: event: ON_CREATE
2020-03-30 10:42:38.356 24581-24581 I/ThreeActivity: event: ON_START
2020-03-30 10:42:38.357 24581-24581 I/ThreeActivity: event: ON_RESUME
2020-03-30 10:42:38.858 24581-24581 I/SecondActivity: event: ON_STOP
// 4 跳转到 SecondActivity(StartActivity(Intent))
2020-03-30 10:42:41.166 24581-24581 I/ThreeActivity: event: ON_PAUSE
2020-03-30 10:42:41.203 24581-24581 I/SecondActivity: event: ON_CREATE
2020-03-30 10:42:41.206 24581-24581 I/SecondActivity: event: ON_START
2020-03-30 10:42:41.207 24581-24581 I/SecondActivity: event: ON_RESUME
2020-03-30 10:42:41.707 24581-24581 I/ThreeActivity: event: ON_STOP

结果如图:

MainActivity
SecondActivity
ThreeActivity
SecondActivity

当Activity不在栈顶时,会创建新的实例(SecondActivity)

2.3 将secondActivity的启动模式设置为 singleTask

singleTask 的定义是栈内复用。
操作:
当 SecondActivity 在栈顶时,跳转到SecondActivity
两个Activity的测试日志

 // 3 进入 SecondActivity 后点击 跳转到 SecondActivity
2020-03-30 10:21:18.126 19082-19082 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:21:18.127 19082-19082 I/SecondActivity: event: onNewIntent
2020-03-30 10:21:18.128 19082-19082 I/SecondActivity: event: ON_RESUME

结果如图:

MainActivity
SecondActivity

三个Activity的测试日志

// 1. 启动 MainActivity
20-03-29 17:41:48.648 16756-16756 I/MainActivity: event: ON_CREATE
2020-03-29 17:41:48.652 16756-16756 I/MainActivity: event: ON_START
2020-03-29 17:41:48.653 16756-16756 I/MainActivity: event: ON_RESUME
// 2. 点击按钮跳转到 SecondActivity
2020-03-29 17:42:01.330 16756-16756 I/MainActivity: event: ON_PAUSE
2020-03-29 17:42:01.363 16756-16756 I/SecondActivity: event: ON_CREATE
2020-03-29 17:42:01.366 16756-16756 I/SecondActivity: event: ON_START
2020-03-29 17:42:01.367 16756-16756 I/SecondActivity: event: ON_RESUME
2020-03-29 17:42:01.889 16756-16756 I/MainActivity: event: ON_STOP
// 3 跳转到 ThreedActivity
2020-03-30 10:35:05.464 22677-22677 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:35:05.498 22677-22677 I/ThreeActivity: event: ON_CREATE
2020-03-30 10:35:05.501 22677-22677 I/ThreeActivity: event: ON_START
2020-03-30 10:35:05.502 22677-22677 I/ThreeActivity: event: ON_RESUME
2020-03-30 10:35:05.994 22677-22677 I/SecondActivity: event: ON_STOP
// 4 跳转到 SecondActivity(StartActivity(Intent))
2020-03-30 10:35:07.298 22677-22677 I/ThreeActivity: event: ON_PAUSE
2020-03-30 10:35:07.313 22677-22677 I/SecondActivity: event: onNewIntent
2020-03-30 10:35:07.313 22677-22677 I/SecondActivity: event: onRestart
2020-03-30 10:35:07.315 22677-22677 I/SecondActivity: event: ON_START
2020-03-30 10:35:07.315 22677-22677 I/SecondActivity: event: ON_RESUME
2020-03-30 10:35:07.788 22677-22677 I/ThreeActivity: event: ON_STOP
2020-03-30 10:35:07.790 22677-22677 I/ThreeActivity: event: ON_DESTROY

结果如图:

MainActivity
SecondActivity
ThreeActivity
2.4 将SecondActivity的启动模式设置为 singleInstance

singleInstance 表示手机系统中保持唯一,独占一个单独的栈。
两个Activity的测试日志

// 1. 启动 MainActivity
2020-03-30 10:45:40.919 25298-25298 I/MainActivity: event: ON_CREATE
2020-03-30 10:45:40.923 25298-25298 I/MainActivity: event: ON_START
2020-03-30 10:45:40.924 25298-25298 I/MainActivity: event: ON_RESUME
// 2. 点击按钮跳转到 SecondActivity
2020-03-30 10:45:48.232 25298-25298 I/MainActivity: event: ON_PAUSE
2020-03-30 10:45:48.277 25298-25298 I/SecondActivity: event: ON_CREATE
2020-03-30 10:45:48.280 25298-25298 I/SecondActivity: event: ON_START
2020-03-30 10:45:48.281 25298-25298 I/SecondActivity: event: ON_RESUME
2020-03-30 10:45:48.449 25298-25298 I/MainActivity: event: ON_STOP
// 3 跳转到 SecondActivity(StartActivity(Intent))
2020-03-30 10:45:58.615 25298-25298 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:45:58.616 25298-25298 I/SecondActivity: event: onNewIntent
2020-03-30 10:45:58.617 25298-25298 I/SecondActivity: event: ON_RESUME

结果如图:

MainActivity
SecondActivity

三个Activity的测试日志

// 1. 启动 MainActivity
2020-03-30 10:46:34.897 25582-25582 I/MainActivity: event: ON_CREATE
2020-03-30 10:46:34.902 25582-25582 I/MainActivity: event: ON_START
2020-03-30 10:46:34.903 25582-25582 I/MainActivity: event: ON_RESUME
// 2. 点击按钮跳转到 SecondActivity
2020-03-30 10:46:37.407 25582-25582 I/MainActivity: event: ON_PAUSE
2020-03-30 10:46:37.453 25582-25582 I/SecondActivity: event: ON_CREATE
2020-03-30 10:46:37.456 25582-25582 I/SecondActivity: event: ON_START
2020-03-30 10:46:37.457 25582-25582 I/SecondActivity: event: ON_RESUME
2020-03-30 10:46:37.624 25582-25582 I/MainActivity: event: ON_STOP
// 3 跳转到 ThreedActivity
2020-03-30 10:46:38.507 25582-25582 I/SecondActivity: event: ON_PAUSE
2020-03-30 10:46:38.543 25582-25582 I/ThreeActivity: event: ON_CREATE
2020-03-30 10:46:38.546 25582-25582 I/ThreeActivity: event: ON_START
2020-03-30 10:46:38.547 25582-25582 I/ThreeActivity: event: ON_RESUME
2020-03-30 10:46:38.781 25582-25582 I/SecondActivity: event: ON_STOP
// 4 跳转到 SecondActivity(StartActivity(Intent))
2020-03-30 10:46:40.534 25582-25582 I/ThreeActivity: event: ON_PAUSE
2020-03-30 10:46:40.549 25582-25582 I/SecondActivity: event: onNewIntent
2020-03-30 10:46:40.549 25582-25582 I/SecondActivity: event: onRestart
2020-03-30 10:46:40.550 25582-25582 I/SecondActivity: event: ON_START
2020-03-30 10:46:40.550 25582-25582 I/SecondActivity: event: ON_RESUME
2020-03-30 10:46:40.759 25582-25582 I/ThreeActivity: event: ON_STOP

结果如图:

MainActivity
SecondActivity
ThreeActivity

实现结果基本和SingleTask 一致。

2.5 singleTask 与 singleInstance

将MainActivity 设置为singleTask ,SecondActivity和 ThreeActivity 设置为 standard
操作:MainActivity->SecondActivity->ThreeActivity->MainActivity

// 1. 启动MainActivity
2020-03-30 11:23:57.292 1350-1350 I/MainActivity: event: ON_CREATE
2020-03-30 11:23:57.296 1350-1350 I/MainActivity: event: ON_START
2020-03-30 11:23:57.297 1350-1350 I/MainActivity: event: ON_RESUME
// 2. 跳转到 SecondActivity 
2020-03-30 11:23:59.926 1350-1350 I/MainActivity: event: ON_PAUSE
2020-03-30 11:23:59.975 1350-1350 I/SecondActivity: event: ON_CREATE
2020-03-30 11:23:59.978 1350-1350 I/SecondActivity: event: ON_START
2020-03-30 11:23:59.979 1350-1350 I/SecondActivity: event: ON_RESUME
2020-03-30 11:24:00.477 1350-1350 I/MainActivity: event: ON_STOP
// 3. 跳转到ThreeActivity
2020-03-30 11:24:02.887 1350-1350 I/SecondActivity: event: ON_PAUSE
2020-03-30 11:24:02.923 1350-1350 I/ThreeActivity: event: ON_CREATE
2020-03-30 11:24:02.926 1350-1350 I/ThreeActivity: event: ON_START
2020-03-30 11:24:02.927 1350-1350 I/ThreeActivity: event: ON_RESUME
2020-03-30 11:24:03.426 1350-1350 I/SecondActivity: event: ON_STOP
// 4.点击跳转到 MainActivity
2020-03-30 11:24:05.517 1350-1350 I/SecondActivity: event: ON_DESTROY
2020-03-30 11:24:05.525 1350-1350 I/ThreeActivity: event: ON_PAUSE
2020-03-30 11:24:05.535 1350-1350 I/MainActivity: event: onNewIntent
2020-03-30 11:24:05.535 1350-1350 I/MainActivity: event: onRestart
2020-03-30 11:24:05.536 1350-1350 I/MainActivity: event: ON_START
2020-03-30 11:24:05.537 1350-1350 I/MainActivity: event: ON_RESUME
2020-03-30 11:24:06.011 1350-1350 I/ThreeActivity: event: ON_STOP
2020-03-30 11:24:06.013 1350-1350 I/ThreeActivity: event: ON_DESTROY

可以看到SingleTask复用的时候,会清空顶部的Activity,使其销毁。

将MainActivity 设置为singleInstance ,SecondActivity和 ThreeActivity 设置为 standard

// 1. 启动MainActivity
2020-03-30 11:31:03.494 4251-4251 I/MainActivity: event: ON_CREATE
2020-03-30 11:31:03.498 4251-4251 I/MainActivity: event: ON_START
2020-03-30 11:31:03.500 4251-4251 I/MainActivity: event: ON_RESUME
// 2. 跳转到 SecondActivity 
2020-03-30 11:31:16.532 4251-4251 I/MainActivity: event: ON_PAUSE
2020-03-30 11:31:16.578 4251-4251 I/SecondActivity: event: ON_CREATE
2020-03-30 11:31:16.582 4251-4251 I/SecondActivity: event: ON_START
2020-03-30 11:31:16.583 4251-4251 I/SecondActivity: event: ON_RESUME
2020-03-30 11:31:16.741 4251-4251 I/MainActivity: event: ON_STOP
// 3. 跳转到ThreeActivity
2020-03-30 11:31:20.061 4251-4251 I/SecondActivity: event: ON_PAUSE
2020-03-30 11:31:20.103 4251-4251 I/ThreeActivity: event: ON_CREATE
2020-03-30 11:31:20.106 4251-4251 I/ThreeActivity: event: ON_START
2020-03-30 11:31:20.107 4251-4251 I/ThreeActivity: event: ON_RESUME
2020-03-30 11:31:20.597 4251-4251 I/SecondActivity: event: ON_STOP
// 4.点击跳转到 MainActivity
2020-03-30 11:31:23.402 4251-4251 I/ThreeActivity: event: ON_PAUSE
2020-03-30 11:31:23.415 4251-4251 I/MainActivity: event: onNewIntent
2020-03-30 11:31:23.415 4251-4251 I/MainActivity: event: onRestart
2020-03-30 11:31:23.416 4251-4251 I/MainActivity: event: ON_START
2020-03-30 11:31:23.417 4251-4251 I/MainActivity: event: ON_RESUME
2020-03-30 11:31:23.627 4251-4251 I/ThreeActivity: event: ON_STOP

可以看出SecondActivity 和ThreeActivity 并没有销毁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值