码个蛋(codeegg)第 792 次推文
作者: _yuanhao _yuanhao_yuanhao_yuanhao
原文: https://juejin.im/post/5db902b7f265da4d39629d6d
码妞看世界
看到地标大楼嘛?
Activity 脑图
在开始之前,先让我们看看 Android 的 activity 到底都有哪些东西?
借一张网上很火的图带你了解 Activity
1. Intent 传递数据大小限制
Intent在传递数据时是有大小限制的,这里官方并未详细说明,不过通过实验的方法可以测出数据应该被限制在1MB之内(1024KB)我们采用传递
Bitmap的方法,发现当图片大小超过1024(准确地说是1020左右)的时候,程序就会出现闪退、停止运行等异常(不同的手机反应不同)因此可以判断
Intent的传输容量在1MB之内。
2. 怎么保存临时状态
内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存,在哪个方法进行
Activity 的 onSaveInstanceState() 和 onRestoreInstanceState() 并不是生命周期方法,它们不同于 onCreate() 、onPause() 等生命周期方法,它们并不一定会被触发。
onSaveInstanceState() 方法,当应用遇到意外情况(如:内存不足、用户直接按 Home 键)由系统销毁一个 Activity ,onSaveInstanceState() 会被调用。
但是当用户主动去销毁一个 Activity 时,例如在应用中按返回键,onSaveInstanceState() 就不会被调用。
除非该 activity 不是被用户主动销毁的,通常 onSaveInstanceState() 只适合用于保存一些临时性的状态,而 onPause() 适合用于数据的持久化保存。
3. onSaveInstanceState() 什么时候被执行
系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 activity A 是否会被销毁
因此系统都会调用 onSaveInstanceState() ,让用户有机会保存某些非永久性的数据。
以下几种情况的分析都遵循该原则:
当用户按下 HOME 键时
长按 HOME 键,选择运行其他的程序时
锁屏时
从 activity A 中启动一个新的 activity 时
屏幕方向切换时
4. Activity 之间跳转时必然执行什么方法?
一般情况下比如说有两个 activity , 分别叫 A , B ,
当在 A 里面** B 组件的时候, A 会调用 onPause() 方法,然后 B 调用 onCreate() , onStart() , onResume() 。
这个时候 B 覆盖了窗体, A 会调用 onStop() 方法。
如果 B 是个透明的,或者 是对话框的样式,就不会调用 A 的 onStop() 方法。
5 除了 Intent,还可以怎么启动一个Activity?
使用 adb shell am 命令
am 启动一个 activity
adb shell am start com.example.fuchenxuan/.MainActivity
am 发送一个广播,使用 action
adb shell am broadcast -a magcomm.action.TOUCH_LETTER
6. scheme 跳转协议
1. 定义
服务器可以定制化跳转 app 页面
app 可以通过 Scheme 跳转到另一个 app 页面
可以通过 h5 页面跳转 app 原生页面
2. 协议格式
qh代表Scheme协议名称test代表Scheme作用的地址域8080代表改路径的端口号/goods代表的是指定页面(路径)goodsId和name代表传递的两个参数
3. Scheme使用
定义一个
Scheme
获取 Scheme 跳转的参数
调用方式
1) 原生调用
2) html调用
3) 判断某个Scheme是否有效
近期文章:
今日问题:
在 Activity 上遇到过哪些坑?
专属升级社区:《这件事情,我终于想明白了》