Android 知识点总结之—Activity(持续补充中)

目录

1. 说下Activity生命周期

2. Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢

3. 说下onSaveInstanceState()方法的作用 ? 何时会被调用?

4. Activity的启动流程

5. onSaveInstanceState(),onRestoreInstanceState的掉用时机

6. activity的启动模式和使用场景

7. Activity A跳转Activity B,再按返回键,生命周期执行的顺序

8. 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的Activity,弹出Dialog时Activity的生命周期

9. onStart 和 onResume、onPause 和 onStop 的区别

10. Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案

11. Activity的onNewIntent()方法什么时候会执行

12. 显示启动和隐式启动

13. scheme使用场景,协议格式,如何使用

14. ANR 的四种场景

15. onCreate和onRestoreInstance方法中恢复数据时的区别

16. activty间传递数据的方式

17. 跨App启动Activity的方式,注意事项

18. Activity任务栈是什么

19. 有哪些Activity常用的标记位Flags

20. Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的


1. 说下Activity生命周期

2. Activity A 启动另一个Activity B 会调用哪些方法?如果B是透明主题的又或则是个DialogActivity呢

3. 说下onSaveInstanceState()方法的作用 ? 何时会被调用?

它只有具备以下条件的时候才会触发:

· 当按下HOME键的时

· 长按HOME键,选择运行程序的时

· 按下电源(关闭屏幕显示)时

· 从Activity中启动其他Activity时

· 屏幕方向切换时(例如从竖屏切换到横屏时)

4. Activity的启动流程

5. onSaveInstanceState(),onRestoreInstanceState的掉用时机

如果用户主动关闭Activity,方法不会调用;如果用户离开Activity(按Home键回到桌面或跳转到其他Activity)那么当Activity不可见的时候,就会调用onSaveInstanceState(Bundle outState),来保存UI数据,因为当Activity不可见的时候,它的优先级最低,在系统内存不足时,最容易被系统销毁。如果该方法被调用,那么在Android 9.0之后,保存方法会在onStop()方法之后调用;在Android 9.0之前,保存方法在onStop()方法之前调用,但不能保证是在onPause()方法之前还是之后调用。如果onRestoreInstanceState(Bundle)方法被调用,那么是在onStart()之后,onResume()之前被调用。

6. activity的启动模式和使用场景

1.标准模式(standard):

每启动一次Activity,就会创建一个新的Activity实例并置于栈顶。谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。

应用场景:一般我们不主动设置启动模式,都是标准模式。

2.栈顶模式(singleTop):

如果栈顶存在该activity的实例,则复用,不存在新建放入栈顶。

应用场景:(1)点击通知跳详情(2)新闻详情页,点击推荐新闻条目

3.栈内模式(singleTask):

如果栈内存在该activity的实例,会将该实例上边的activity全部出栈,将该实例置于栈顶,如果不存在,则创建

应用场景:(1)APP的home页面,如果跳转到其他页面后又要跳回来(2)浏览器的主页

4.单例模式(singleInstance):

新开一个任务栈,该栈内只存放当前实例

应用场景:项目中语音通话功能,来电话显示页面采用的就是singleinstance模式

如何设置:清单文件中,activity节点下lauchmode属性如果使用了栈顶或栈内模式,通过onNewIntent回调中的Intent参数来接收传递的内容

7. Activity A跳转Activity B,再按返回键,生命周期执行的顺序

8. 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的Activity,弹出Dialog时Activity的生命周期

9. onStart 和 onResume、onPause 和 onStop 的区别

这个其实很好理解与区分:

onPause和onStop就是当前的activity看不到了(就是在后台了),那么就会回调这个比如:

1.在当前activity按了home按键回到桌面,就会回调onPause和onStop

2.从当前activity跳到另一个activity也会回调onPause和onStop

3.在当前的activity弹出一个dialog,此时的activity不在最上层了(但此时还在前台),那么只会调用onPause(告诉使用者我要暂停一下,先处理dialog)结论:activity已经到了后台,那么就会掉到onStop,如果还在前台可见弹窗这样的情况,就只会调用onPause

onStart和onResume和上面的一样,以下三点对应上面的三点:

1.从桌面返回activity会调用onStart和onResume

2.返回到当前的activity也会调用onStart和onResume

3.dialog消失(dismiss)之后,只会调用onResume

10. Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案

11. Activity的onNewIntent()方法什么时候会执行

12. 显示启动和隐式启动

 a.显式Intent(Explicit intent):通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。

  b. 隐式Intent(Implicit intent):通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。

13. scheme使用场景,协议格式,如何使用

14. ANR 的四种场景

在Android系统中,应用程序的响应由Activity Manager及Window Manager两个系统服务所监控。通常情况下,应用出现如下四类情况时,系统将报ANR:

KeyDispatchTimeout(最常见类型)—— input事件5s内未处理完成导致ANR发生,主要为按键和触摸事件;

日志关键字:InputDispatching Timeout

BroadcastTimeout:—— BroadcastReceiver在特定时间内未处理完成导致ANR发生(限制:前台广播10s;后台广播60s);

日志关键字:Timeout of broadcast BroadcastRecord

ServiceTimeout —— Service在特定的时间内未处理完成导致ANR发生。(限制:前台服务20s;后台服务200s);

日志关键字:Timeout executing service

ContentProviderTimeout —— 内容提供者,在10s内未处理完成导致ANR发生;

日志关键字:Timeout publishing content providers

15. onCreate和onRestoreInstance方法中恢复数据时的区别

因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。而onRestoreInstanceState的Bundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。

onRestoreInstanceState是在onStart()之后被调用的。有时候我们需要onCreate()中做的一些初始化完成之后再恢复数据,用onRestoreInstanceState会比较方便。

16. activty间传递数据的方式

以下为四种常用的传递数据方式

· 1.通过Intent传递数据

· 2.通过静态变量(static)传递数据

· 3.通过剪贴板(Clipboard)传递数据

· 4.通过全局对象传递数据

17. 跨App启动Activity的方式,注意事项

18. Activity任务栈是什么

转自:彻底弄懂Activity的启动模式和任务栈

https://blog.csdn.net/yh_coco/article/details/79427595?spm=1001.2014.3001.5502

19. 有哪些Activity常用的标记位Flags

Activity的Flags有很多,这里主要分析一些常用的标记位。

FLAG_ACTIVITY_NEW_TASK

此标记位作用是为Activity指定“singleTask”启动模式,其效果和在XML中指定相同android:launchMode="singleTask"

FLAG_ACTIVITY_SINGLE_TOP

此标记位作用是为Activity指定“singleTop”启动模式,其效果和在XML中指定相同android:launchMode="singleTop"

FLAG_ACTIVITY_CLEAR_TOP

具有此标记位的Activity,当它启动时,在同一个任务栈中位于它上面的Activity都要出栈。此标记位一般会和singleTask启动模式一起出现,此情况下,若被启动的Activity实例存在,则系统会调用它的onNewIntent。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有此标记位的Activity不会出现在历史Activity的列表中,当某些情况我们不希望用户通过历史列表回到我们的Activity时这个标记比较有用。他等同于在XML中指定Activity的excludeFromRecents属性。android:excludeFromRecents="true"

20. Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的

1、保存数据的方法:onSaveInstanceState(Bundle outState)

触发条件:Activity未执行finish,比如按了home键,电源键,旋转Activity,内存不足等。这种数据保存都是临时的。如果想保存一些持久数据,用onPause

2、恢复数据的方法:onRestoreInstanceState(BundlesavedInstanceState)

触发条件:onSaveInstanceState已经触发,Activity被系统回收之后,再次打开。

3、恢复数据的方法:Create(Bundle savedInstanceState)

触发条件:创建Activity实例的时候这个其实很好理解与区分:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值