大家可以关注我的AllAboutAndroid系列项目

没有写博客的习惯,文笔较差,敬请见谅

前言

本文将从Android SDK源码分析Android的生命周期,不仅仅包含市面上随便搜索一下就有N多的“基础”Android 生命周期。因为作为一个几百亿美元市值的大厂来说,我发现了App有N多生命周期的Bug;被某中国市值最大的互联网公司面试时,发现面试官对于生命周期理解及其之差,我觉得为了Android生态的发展,有必要普及一下Android的生命周期到底是什么样的!!

导语

相信大家在编写一段时间Android代码之后,发现其实“Android”这个东西也就是这样,随便写写就可以把产品经理及UED的设计应付的很好。“因为Android的生命周期真的特别好理解,就是一条线下来,没有什么坑,不会被埋进坑里。”这是我写了一段时间之后的感觉自身无法提高的感受。这时Bugly上发现一个特别怪异的Bug:


浅析 Android 生命周期(一)_第1张图片 怪异的Bug

有用的只有一条:Unable to start activity ComponentInfo{x.x.x/x.x.x.x.x.x.XActivity}: java.lang.NullPointerException: Attempt to read from field 'java.lang.String x.x.x.x.b.a.i' on a null object reference
剩下都是Android源码,这是为什么呢??还不是必现的Bug,简直难倒当时弱鸡的我。

以下皆为吐槽经过6个月的各种查阅资料终于找到如何“必现”这个可恶的Bug,并且发现我们日均200w访问量的App竟然各种这样的Bug。纵然觉得这简直是对Android生命周期的漠视,如今各大面试及培训、博客都只会告诉你最最最基本的生命周期,但是生产上呢?问题多的可想而知。

  1. [复现方法] :这个Bug是因为Activity被系统回收,内部变量被清空而没有保存,重新创建Activity时走onCreate方法时导致的。一般情况下模拟Activity被系统回收不容易,但是可以在设置->开发者选项->不保留活动中开启。
  2. [解决方法] : 在onSaveInstanceState()方法保存需要的内部变量,onCreate时,bundle不为null,则说明是被销毁后重新创建的,这时获取保存在bundle中的值就好

浅析Activity的生命周期

看SDK其实是有步骤的,最开始看的应该是最基础的接口,先让我们看Instrumentation 类中关于Activity生命周期的东西:

public class Application extends ContextWrapper implements ComponentCallbacks2 {......    private ArrayList mActivityLifecycleCallbacks =            new ArrayList();......    public interface ActivityLifecycleCallbacks {        void onActivityCreated(Activity activity, Bundle savedInstanceState);        void onActivityStarted(Activity activity);        void onActivityResumed(Activity activity);        void onActivityPaused(Activity activity);        void onActivityStopped(Activity activity);        void onActivitySaveInstanceState(Activity activity, Bundle outState);        void onActivityDestroyed(Activity activity);    }......}

可以看到在Application中,其实定义了一个ArrayList去储存所添加的每个Activity的生命周期。

浅析 Android 生命周期(一)_第2张图片 请关注我吧!! AllAboutCoding

更多相关文章

  1. Android手机访问Django测试服务器方法
  2. android Map 使用方法
  3. Android实现屏幕旋转方法总结
  4. #菜鸟之旅#Android Studio开发JNI工程——Native调用Java方法获
  5. Android基本组件学习(Activity生命周期)
  6. xamarin Android activity生命周期详解
  7. 发现自己喜欢了移动端开发--Android
  8. Android 资源文件使用方法详解

随机推荐

  1. android之ViewFlipper实现左右滑动动画效
  2. Android学习笔记之Android包、ADB介绍
  3. 一份关于 Java、Kotlin 与 Android(安卓)
  4. Android消息处理系统——Looper、Handler
  5. TextView文字阴影效果以及styles文件的使
  6. Android:使用VideoView(TV显示屏待机状态,循
  7. 注意android裁图的Intent action
  8. Android(安卓)关于休眠的几个坑点
  9. Android(安卓)Google Map实例 - 添加GPS
  10. Android守护进程