今天突发奇想的想总结一下我个人认为,作为一个Android开发者必须知道的知识点。
目录
1.3 getContext(). getBaseContext(). getApplicationContext()以及this的作用和区别
1. Context
context用的够频繁吧,问一下自己知道context是什么吗?context的作用是什么?getContext(), getBaseContext(), getApplicationContext()及其this的作用分别是什么以及有什么区别?context会为null吗?什么时候是为null呢?
1.1 context是什么?
是一个应用程序全局信息的接口,是一个抽象类,Android的系统实现它,允许访问应用程序特别的资源和类,以及对应用程序级别的操作,比如:启动Activity、启动广播、传递接收Intent、操作数据库等等。
1.2 context的作用是什么?
- 加载资源
- 启动activity
- 创建view视图
- 获取系统服务
1.3 getContext(). getBaseContext(). getApplicationContext()以及this的作用和区别
作用都是获取context,但获取的context是不同的,如下图所示。
1.3.1 getApplicationContext()
获取的是Application Context,所以生命周期最长,当你需要传递一个超出activity的context时就需要用到Application Context。
例如:当你创建一个单例类时,就需要用到Application Context, 如果这时候你用的是Activity的context,就会导致内存泄漏,因为单例类是一直存在的,也就会一直保持对Activity Context的引用,从而使Activity不会被Android的垃圾回收机制回收。
总结:当你需要一个context的生命周期大于某个Activity Context时,就需要用Application Context。
1.3.2 getContext() 和 this
获取的是Activity的Context,与Activity的生命周期相关联,当你需要在一个Activity的生命周期内使用Context时,就需要使用Activity Context。
例如:当你需要创建一个生命周期与activity 生命周期相互联系的对象时,就需要使用Activity Context。
1.3.3 getBaseContext()
通过ContextWrapper.getBaseContext()来获取context。
ContextWrapper:代理实现Context,该实现简单地将所有调用委托给另一个Context,通过子类化来改变作用而不改变Context的源代码。
getBaseContext()获得由构造函数或setBaseContext设置的基本context。
1.4 context数量
context的类型有三种,分别是Application、Activity、Service三种类型,
所以context的数量计算方式为:Context数量 = Activity数量 + Service数量 + 1(Application)
2. Activity与Fragment的区别及联系
关于Activity和Fragment的生命周期请看博客 -> Android Activity&Fragment生命周期学习
Fragment是Activity的一部分,对于Activity能构建自己的UI到相对应的Activity。可以认为Fragment是Activity的子类。但是Fragment不能独立存在,它必须和Activity相联系,有自己的生命周期,可以接受自己的输入事件,但是它的生命周期是基于对应Activity的生命周期,例如,当Activity暂停时,其中的所有Fragment也都会暂停,当Activity被销毁时,所有Fragment也都会被销毁。
Activity是一个应用程序组件,用于构建用户交互界面,在Activity中添加Fragment是为了创建多窗口UI界面,一个Activity可以包含多个Fragment,同一个Fragment也可以在不同的Activity间重用。
Activity和Fragment之间的生命周期中,最重要的区别就是:如何存储到各自的后台堆栈中。默认情况下,Activity会被放到系统管理Activity的后台堆栈中(以便用户可以使用后退按钮导航回该Activity)。但是对于Fragment,只有当显式地请求在删除Fragment期间通过调用addToBackStack()来保存实例时,才会将Fragment放入由对应Activity管理的后台堆栈中。
3. Android Studio调试技巧
掌握好的调试技巧有助于你很快的找出问题所在,详细请看博客:Android Studio调试技巧
4. Android Intent详解
当我们实现Activity间的跳转时都需要用到Intent,Intent翻译过来为‘意图’,除了广为人知的跳转Activity时需要用到Intent,你还知道关于Intent的其他知识点吗?具体请看另一篇博客:Android Intent详解
~未完待续中... 知识点有点乱,因为我想到什么就添加什么,日后需要整理。