Activity的36大难点,你掌握了几个?

摘要:前言 学 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 的内容以问题的形式梳理出来,也供大家查缺补漏。 本文中,我将一改往日写博客的习惯,全文用 XMind 将所有知识点以思维导图的形
前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏。 本文中,我将一改往日写博客的习惯,全文用 XMind 将所有知识点以思维导图的形式呈现,欢迎大家食用~~ 文章目录 方便大家学习,我在 GitHub 上建立个 仓库 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所以大家可以直接关注该仓库,以免错过精彩内容! 仓库地址: 超级干货!精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star ! 神图 在开始之前,先让我们看看 Android 的 activity 到底都有哪些东西? 借一张网上很火的图带你了解 Activity 1. 生命周期 先贴一张闻名遐迩的图 我们生命周期先看看具体有哪些方法回调,在逐一攻破: 1.1 Dialog 弹出时 如果是单纯是创建的 dialog ,Activity 并不会执行生命周期的方法 但是如果是跳转到一个不是全屏的 Activity 的话, 当然就是按照正常的生命周期来执行了 即 onPasue() -> onPause() ( 不会执行原 Activity 的 onStop() , 否则上个页面就不显示了 ) 1.2 横竖屏切换时 不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 设置 Activity 的 android:configChanges="orientation" 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 设置 Activity 的 android:configChanges="orientation|keyboardHidden" 时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法 注意:还有一点,非常重要,一个 Android 的变更细节!当 API >12 时,需要加入 screenSize 属性,否则屏幕切换时即使你设置了 orientation 系统也会重建 Activity ! 横竖屏切换生命周期的执行 1.3 不同场景下 Activity 生命周期的变化过程 启动 Activity : onCreate() ---> onStart() ---> onResume() ,Activity 进入运行状态。 锁屏时会执行 onPause() 和 onStop() , 而开屏时则应该执行 onStart() onResume() Activity 退居后台: 当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏: onPause() ---> onStop() ,进入停滞状态。 Activity 返回前台: onRestart() ---> onStart() ---> onResume() ,再次回到运行状态。 Activity 退居后台: 且系统内存不足, 系统会杀死这个后台状态的 Activity ,若再次回到这个 Activity ,则会走 onCreate() --> onStart() ---> onResume() 1.4 将一个 Activity 设置成窗口的样式 只需要给我们的 Activity 配置如下属性即可。 android:theme="@android:style/Theme.Dialog" 1.5 退出已调用多个 Activity 的 Application 通常情况用户退出一个 Activity 只需按返回键,我们写代码想退出 activity 直接调用 finish() 方法就行。 发送特定广播: 在需要结束应用时, 发送一个特定的广播,每个 Activity 收到广播后,关闭 即可。 给某个 activity 注册接受接受广播的意图 registerReceiver(receiver, filter) 如果过接受到的是 关闭 activity 的广播 activity finish() 掉 递归退出 就调用 finish() 方法 把当前的 Activity 退出 在打开新的 Activity 时使用 startActivityForResult , 然后自己加标志, 在 onActivityResult 中处理, 递归关闭。
阅读全文