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

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.通过全局对象传递数据

· 使用Intent的putExtra传递

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实例的时候

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容