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

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

前言

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

导语

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


怪异的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的生命周期。

请关注我吧!! AllAboutCoding

更多相关文章

  1. Android面试必备——AsyncTask源码解析
  2. Android(安卓)Studio导入第三方类库的方法
  3. android Map 使用方法
  4. Android(安卓)ORM系列之GreenDao最佳实践
  5. Android(安卓)startActivity源码详解
  6. Android开发之低调的Service
  7. android与sqlite的连接(增、删、查、改)
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android 异步处理
  2. Android Activity之间切换出现短暂黑屏的
  3. Android App 获取 root权限
  4. android横竖屏切换(复制未整理)
  5. 【Android(安卓)Training - 03】使用Frag
  6. Android快速设置中添加隐藏状态栏和导航
  7. 定制android启动界面
  8. 如何在android中调用数据库资源
  9. 非常详细的测试unity与android之间的通讯
  10. Android 实现闪屏页和右上角的倒计时跳转