Activity 传数据有什么难点?

码个蛋(codeegg)第 792 次推文

作者:  _yuanhao _yuanhao_yuanhao_yuanhao

原文: https://juejin.im/post/5db902b7f265da4d39629d6d

码妞看世界

Activity 传数据有什么难点?

看到地标大楼嘛?

Activity 脑图

在开始之前,先让我们看看 Android 的 activity 到底都有哪些东西?

借一张网上很火的图带你了解 Activity

Activity 传数据有什么难点?

1. Intent 传递数据大小限制

Activity 传数据有什么难点?
  • Intent 在传递数据时是有大小限制的,这里官方并未详细说明,不过通过实验的方法可以测出数据应该被限制在 1MB 之内( 1024KB

  • 我们采用传递 Bitmap 的方法,发现当图片大小超过 1024(准确地说是 1020 左右)的时候,程序就会出现闪退、停止运行等异常(不同的手机反应不同)

  • 因此可以判断 Intent 的传输容量在 1MB 之内。


2. 怎么保存临时状态

内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存,在哪个方法进行

Activity 传数据有什么难点?
  • Activity 的 onSaveInstanceState() 和 onRestoreInstanceState() 并不是生命周期方法,它们不同于 onCreate() 、onPause() 等生命周期方法,它们并不一定会被触发。

  • onSaveInstanceState() 方法,当应用遇到意外情况(如:内存不足、用户直接按 Home 键)由系统销毁一个 Activity ,onSaveInstanceState() 会被调用。

  • 但是当用户主动去销毁一个 Activity 时,例如在应用中按返回键,onSaveInstanceState() 就不会被调用。

  • 除非该 activity 不是被用户主动销毁的,通常 onSaveInstanceState() 只适合用于保存一些临时性的状态,而 onPause() 适合用于数据的持久化保存。

3. onSaveInstanceState() 什么时候被执行

Activity 传数据有什么难点?
  • 系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 activity A 是否会被销毁

  • 因此系统都会调用 onSaveInstanceState() ,让用户有机会保存某些非永久性的数据。

  • 以下几种情况的分析都遵循该原则:

  1. 当用户按下 HOME 键时

  2. 长按 HOME 键,选择运行其他的程序时

  3. 锁屏时

  4. 从 activity A 中启动一个新的 activity 时

  5. 屏幕方向切换时

4. Activity 之间跳转时必然执行什么方法?

Activity 传数据有什么难点?

一般情况下比如说有两个 activity , 分别叫 A , B , 

当在 A 里面** B 组件的时候, A 会调用 onPause() 方法,然后 B 调用 onCreate() , onStart() , onResume() 。

这个时候 B 覆盖了窗体, A 会调用 onStop() 方法。

如果 B 是个透明的,或者 是对话框的样式,就不会调用 A 的 onStop() 方法。

5 除了 Intent,还可以怎么启动一个Activity?

Activity 传数据有什么难点?
  • 使用 adb shell am 命令

  1. am 启动一个 activity

  2. adb shell am start com.example.fuchenxuan/.MainActivity

  3. am 发送一个广播,使用 action

  4. adb shell am broadcast -a magcomm.action.TOUCH_LETTER


6. scheme 跳转协议

Activity 传数据有什么难点?

1. 定义

Activity 传数据有什么难点?
  • 服务器可以定制化跳转 app 页面

  • app 可以通过 Scheme 跳转到另一个 app 页面

  • 可以通过 h5 页面跳转 app 原生页面


2. 协议格式

Activity 传数据有什么难点?Activity 传数据有什么难点?
  • qh 代表 Scheme 协议名称

  • test 代表 Scheme 作用的地址域

  • 8080 代表改路径的端口号

  • /goods 代表的是指定页面(路径)

  • goodsIdname 代表传递的两个参数


3. Scheme使用

  • 定义一个 Scheme

Activity 传数据有什么难点?
  • 获取 Scheme 跳转的参数

Activity 传数据有什么难点?
  • 调用方式

1) 原生调用

Activity 传数据有什么难点?

2) html调用

Activity 传数据有什么难点?

3) 判断某个Scheme是否有效

Activity 传数据有什么难点?

近期文章:

今日问题:

在 Activity 上遇到过哪些坑?

Activity 传数据有什么难点?

专属升级社区:《这件事情,我终于想明白了》 

Activity 传数据有什么难点?

相关文章: