美文网首页
Android开发艺术探索阅读笔记(目录)

Android开发艺术探索阅读笔记(目录)

作者: mumuxi_ | 来源:发表于2020-11-19 23:27 被阅读0次

    目录:

    第一章 Activity的生命周期和启动模式

    1. Activity的生命周期全面分析
      1.1 activity 典型情况下的生命周期分析
      1.2 activity 异常情况下的生命周期分析
    2. Activity 启动模式
      2.1 Activity 的 LauncherMode
      2.2 Activity 的 Flags
    3. IntentFilter匹配规则

    Android开发艺术探索阅读笔记(第一章)

    第二章 IPC机制

    1. Android IPC简介
    2. Android中的多进程模式
      2.1 开启多进程模式
      2.2 多进程模式的运行机制
    3. IPC基础概念介绍
      2.1 Serializable 接口
      2.2 Parcelable 接口
      2.3 Binder
    4. Android中的IPC方式
      4.1 使用Bundle
      4.2 使用文件共享
      4.3 使用Messenger
      4.5 使用AIDL
      4.5 使用ContentProvider
      4.6 使用Socket
    5. Binder连接池
    6. 选择合适的IPC方式

    第三章 View的事件体系

    1. View基础知识
      1.1 什么是View
      1.2 View的位置参数
      1.3 MotionEvent和TouchSlop
      1.4 VelocityTracker 、GestureDectector 和 Scroller
    2. View的滑动
      2.1 使用scrollTo / scrollBy
      2.2 使用动画
      2.3 改变布局参数
      2.4 各种滑动方式的对比
    3. 弹性滑动
      3.1 使用Scroller
      3.2 通过动画
      3.3 使用延时策略
    4. View的事件分发机制
      4.1 点击事件的传递规则
      4.2 事件分发的源码解析
    5. View的滑动冲突
      5.1 常见的滑动冲突场景
      5.2 滑动冲突的处理规则
      5.3 滑动冲突的解决方式

    第四章 View的工作原理

    1. 初识 ViewRoot 和 DecordView
    2. 理解MeasureSpec
      2.1 MeasureSpec
      2.2 MeasureSpec 和 LayoutParams的对应关系
    3. View的工作过程
      3.1 measure过程
      3.2 layout过程
      3.3 draw过程
    4. 自定义View
      4.1 自定义View的分类
      4.2 自定义View须知
      4.3 自定义View示例
      4.4 自定义View的思想

    第五章 理解RemoteViews

    1. RemoteViews的应用
      1.1 RemoteViews在通知栏上的应用
      1.2 在桌面小部件上的应用
      1.3 PendingIntent概述
    2. RemoteViews的内部机制
    3. RemoteViews的意义

    第六章 Android Drawable

    1. Drawable简介
    2. Drawable 的分类
      2.1 BitmapDrawable
      2.2 ShapeDrawable
      2.3 LayerDrawable
      2.4 StateListDrawable
      2.5 LevelListDrawable
      2.6 TransitionDrawable
      2.7 InsertDrawable
      2.8 ScaleDrawable
      2.9 ClipDrawable
    3. 自定义Drawable

    第七章 Android 动画升入分析

    1. View动画
      1.1 View动画的种类
      1.2 自定义View动画
      1.3 帧动画
    2. View动画的特殊使用场景
      2.1 LayoutAnimation
      2.2 Activity的切换效果
    3. 属性动画
      3.1 使用属性动画
      3.2 理解插值器和估值器
      3.3 属性动画的监听器
      3.4 对任意属性做动画
      3.5 属性动画的工作原理
    4. 使用动画注意事项

    第八章 理解Window 和 WindowManager

    1. Window和WindowManager
    2. Window的内部机制
      2.1 Window 的添加过程
      2.2 Window 的删除过程
      2.3 Window 的更新过程
    3. Window的创建过程
      3.1 Activity的Window创建过程
      3.2 Dialog的Window创建过程
      3.3 Toast的Window创建过程

    第九章 四大组件的工作过程

    1. 四大组件的运行状态
    2. Activity的工作过程
    3. Service的工作过程
      3.1 Service的启动过程
      3.2 Service的绑定过程
    4. BroadcastReceiver的工作过程
      4.1 广播的注册过程
      4.2 广播的发送和接收过程
    5. ContentProvier的工作过程

    第十章 Android 消息机制

    1. Android的消息机制概述
    2. Android的消息机制分析
      2.1 ThreadLocal的工作原理
      2.2 消息队列的工作原理
      2.3 Lopper的工作原理
      2.4 Handler的工作原理
    3. 主线程的消息循环

    第十一章 Android 的线程和线程池

    1. 主线程和子线程
    2. Android中线程的形态
      2.1 AsyncTask
      2.2 AsyncTask的工作原理
      2.3 HandlerThread
      2.4 IntentService
    3. Android中的线程池
      3.1 ThreadPoolExecutor
      3.2 线程池的分类

    第十二章 Bitmap的加载和Cache

    1. Bitmap的高效加载
    2. Android中的缓存策略
      2.1 LruCache
      2.2 DisLruCache
      2.3 ImageLoader
    3. ImageLoader的使用
      3.1 照片墙效果
      3.2 优化列表的卡顿现象

    第十三章 综合技术

    1. 使用CrashHandler来获取应用的crash信息
    2. 使用mutidex来解决方法数越界
    3. Android的动态加载技术
    4. 反编译初步
      4.1 使用dex2jar 和jd-gui反编译apk
      4.2 使用apktool对apk进行二次打包

    第十四章 JNI 与NDK编程

    1. JNI的开发流程
    2. NDK的开发流程
    3. JNI的数据类型和类型签名
    4. 调用Java方法的流程

    第十五章 Android性能优化

    1. Android 性能优化的方法
      1.1 布局优化
      1.2 绘制优化
      1.3 内存泄漏优化
      1.4 响应速度优化和ANR日志分析
      1.5 ListView 和 Bitmap优化
      1.6 线程优化
      1.7 一些性能优化建议
    2. 内存泄漏分析指MAT工具
    3. 提高程序的可维护性

    第一章 Activity的生命周期和启动模式

    1. Activity的生命周期全面分析

    1.1 activity 典型情况下的生命周期分析
    有用户正常参与的情况下所发生的Activity生命周期的变化

    • onCreate : 表示Activity正在被创建。
    • onRestart : 当前Activity从不可见重新变为可见状态时。
    • onStart : 边事Activity 正在被启动,此时已经可见,但是还没有出现在前台,无法与用户交互。
    • onResume : 表示Acitivity可见并且出现在前台开始活动。
    • onPause : onPause执行完,新Activity的onResume才会执行,由于这个原因,不能再onPause 方法中做耗时操作而使得新Activity尽快地显示出来并切换到前台;此时Activity仍然可见,但是无法交互。(拉起透明主题Activity,Dialog出现时就只会回到onPause ,不回调 onStop,此时activity 可见,但无法与用户进行交互)
    • onStop :表示Activity即将停止,并且不可见,可以做一些稍微重量级的工作,同样不能太耗时。
    • onDestroy : 表示Activity即将被销毁,可以做一些回收工作和最终的资源释放。
    0_1314838777He6C.png

    1.2 activity 异常情况下的生命周期分析

    • 资源相关的系统配置发生改变导致的Activity被杀死并重新创建,例如手机发生屏幕旋转。
      给Activity添加android:configchanges属性可以让Activity在屏幕旋转的时候不重新创建。
    • 资源内存不足导致低优先级的Activity被杀死,Activity优先级从高到低:
      (1)前台Activity------正在和用户交互的Activity,优先级最高。
      (2)可见但非前台Activity------比如Activity中弹出一个对话框,导致Activity科技那但是位于后台无法和用户进行交互。
      (3) 后台Activity------已经被暂停的Activity,比如执行了onStop,优先级最高。
      如果一个进程中没有四大组件在执行,那么这个进程很快被系统杀死。最好的方法是将后台工作放入Service中从而保证进程有一定的优先级,这样就不会轻易被系统杀死。

    2. Activity 启动模式

    Activity默认启动模式,多次启动同一个Activity, 系统会重复创建多个实例。因此提供启动模式,让开发选择,来解决这个问题。

    2.1 Activity 的 LauncherMode
    (1)Standard:标准模式,也是系统的默认模式。每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。
    (2)singleTop:栈顶复用模式。在这种模式下,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数可以取出当前请求的信息。需要注意的是这个Activity的onCreate 、onStart 不会被系统调用,因为它没有发生改变。如果新Activity的实例已存在但不是位于栈顶,那么新Activity仍然会重新创建。
    (3)singleTask:栈内复用模式。这是一种单实例模式,如果Activity在一个栈中已经存在,那么多次启动此Activity都不会创建实例,也会回调onNewIntent()方法。singleTask默认具有clearTop的效果,加入任务栈的情况是ADBC ,此时Activity D 以singleTask的方式请求启动,会把Activity BC先出栈,于是最终栈内的情况是AD。
    (4)singleInstance:加强的singleTask模式,除了具备singleTask模式所有特性外,具有这种模式的Activity只能单独位于一个任务栈中。

    taskAffinity 属性
    taskAffinity,可以翻译为任务相关性。这个参数标识了一个 Activity 所需要的任务栈的名字,默认情况下,所有 Activity 所需的任务栈的名字为应用的包名,当 Activity 设置了 taskAffinity 属性,那么这个 Activity 在被创建时就会运行在和 taskAffinity 名字相同的任务栈中,如果没有,则新建 taskAffinity 指定的任务栈,并将 Activity 放入该栈中。另外,taskAffinity 属性主要和 singleTask 或者 allowTaskReparenting 属性配对使用,在其他情况下没有意义。

    如何给Activity指定启动模式?有两种方法,第一种是通过清单文件为Activity指定

    <activity android:name=".SecondActivity"
                android:launchMode="singleTask"/>
    

    另一种启情况就是通过intent的标志位为Activity指定启动模式

     Intent intent = new Intent();
     intent.setClass(this,SecondActivity.class);
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(intent);
    

    这两种方式都可以为Activity指定启动模式,但是二者还是有一些区别的,首先,优先级第二种比第一种高,\color{red}{两种同时存在的时候,以第二种为准},其次,上述两种方式在限定范围内有所不同,比如,第一种方式无法直接为Activity设置FLAG_ACTIVITY_CLEAR_TOP标识,而第二种方式无法指定singleInstance模式

    2.2 Activity 的 Flags

    Activity的Flags有很多,这里主要是分析一些常用的标记位,标记位的作用很多,有些标志位可以设置Activity的启动模式,比如FLAG_ ACTIVITY _ NEW _ TASK,还有一些直接影响Activity的运行状态,比如FLAG_ ACTIVITY_ CLEAR_ TOP,下面我们来说下一些常用的标记位,剩下的读者可以去看下官方文档,大部分的情况下,Activity不需要设置标记位,因此对于标记位理解即可,在使用标记位的时候,要注意有些标记位是系统内部使用的,应用不需要去设置这些以防出问题。

    FLAG_ ACTIVITY_ NEW _ TASK

    这个标志位的作用是为Activity指向‘singleTask’启动模式,其效果和XML中指定该模式相同

    FLAG_ ACTIVITY_ SINGLE _ TOP

    这个标志位的作用是为Activity指向‘singleTop’启动模式,其效果和XML中指定该模式相同

    FLAG_ ACTIVITY_ CLEAR _ TOP

    具有此标记位的Activity,当他启动时,在同一个任务栈中所有位于他上面的Activity都要出栈,这个模式一般需要和FLAG_ ACTIVITY_ NEW _ TASK配合使用,在这种情况下,被启动的Activity的实例如果已经存在,那么系统就会调用它的onNewIntent,如果被启动的Activity采用标准模式,那么他连同他之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶

    FLAG_ ACTIVITY_ EXCLUDE_ FROM _ RECENTS

    具有此标记位的Activity,不会出现在历史Activity的列表当中,当某种情况下我们不希望用户通过历史列表回到我们的Activity的时候就使用这个标记位了,他等同于在XML中指定Activity的属性:android:excludeFromRecents="true"

    3. IntentFilter匹配规则

    我们知道,启动Activity分为两种,显示调用和隐式调用,二者的区别这里就不多讲了,显示调用需要明确的指定被启动对象的组件信息,包括包名和类名,而隐式意图则不需要明确指定调用信息,原则上一个intent不应该即是显式调用又是隐式调用,如果二者共存的话以显式调用为主,显式调用很简单,这里主要介绍隐式调用,隐式调用需要intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标Activity,IntentFilter中的过滤信息有action,category,data,下面是一个过滤规则的实例:

           <activity
                android:name=".CodeActivity"
                android:configChanges="screenLayout"
                android:launchMode="singleTask"
                android:taskAffinity="com.liuguilin.activitysample1">
                <intent-filter>
                    <action android:name="com.liuguilin.activitysample.c" />
                    <action android:name="com.liuguilin.activitysample.d" />
    
                    <category android:name="com.liuguilin.category.c" />
                    <category android:name="com.liuguilin.category.d" />
    
                    <data android:mimeType="text/plain" />
                </intent-filter>
            </activity>
    

    为了匹配过滤列表,需要同时匹配过滤列表中的action,category,data信息,否则匹配失败,一个过滤列表中的action,category,data可以有多个,所有的action,category,data分别构成不同类别,同一类型的信息共同约束当前类别的匹配过程,只有一个intent同时匹配action类别,category类别,data类别才算是匹配完成,只有完全匹配才能成功启动目标Activity,另外一点,一个Activity钟可以有多个intent-filter,一个intent只要能匹配一组intent-filter即可成功启动Activity。

    • 1.action的匹配规则

    action是一个字符串,系统预定了一些action,同时我们也可以在应用中定义自己的action,action的匹配规则是intent中的action必须能够和过滤规则中的action匹配,这里说的匹配是指action的字符串值完全一样,一个过滤规则中的可以有多个action,那么只要intent中的action能够和过滤规则匹配成功,针对上面的过滤规则,需要注意的是,intent如果没有指定action,那么匹配失败,总结一下,action的匹配需求就是intent中的action存在且必和过滤规则一样的action,这里需要注意的是他和category匹配规则的不同,另外,action区分大小写,大小写不同的字符串匹配也会失败

    • 2.category的匹配规则

    category是一个字符串,系统预定义了一些category,同时我们也可以在应用中定义自己的category。category的匹配规则和action不同,它要求Intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。换句话说,Intent如果出现了category,不管有几个category,对于每个category来说,它必须是过滤规则中已经定义的category。当然,Intent中可以没有category,如果没有category的话,按照上面的描述,这个Intent仍然可以匹配成功。这里要注意下它和action匹配过程的不同,action
    是要求Intent中必须有一个action且必须能够和过滤规则中的某个action相同,而category要求Intent可以没有category,但是如果你一旦有category,不管有几个,每个都要能和过滤规则中的任何一个category相同。为了匹配前面的过滤规则中的category,我们可出下面的Intent,intent.addcategory (“com.ryg.category.c”)或者Intent.addcategory (“com rcategory.d)亦或者不设category。为什么不设置category也可以匹配呢?原因是系统在调用startActivity或者startActivityForResult的时候会默认为Intent加上“android.intent.category.DEFAULT”这个category,所以这个category就可以匹配前面的过滤规则中的第三个category。同时,为了我们的activity能够接收隐式调用,就必须在intent-filter中指定“android intent categor.DEFAULT”这个category,原因刚才已经说明了。

    • 3.data匹配规则

    https://blog.csdn.net/lixpjita39/article/details/78201689

    第二章 IPC机制

    1. Android IPC简介
    2. Android中的多进程模式
      2.1 开启多进程模式
      2.2 多进程模式的运行机制
    3. IPC基础概念介绍
      2.1 Serializable 接口
      2.2 Parcelable 接口
      2.3 Binder
    4. Android中的IPC方式
      4.1 使用Bundle
      4.2 使用文件共享
      4.3 使用Messenger
      4.5 使用AIDL
      4.5 使用ContentProvider
      4.6 使用Socket
    5. Binder连接池
    6. 选择合适的IPC方式

    第三章 View的事件体系

    1. View基础知识
      1.1 什么是View
      1.2 View的位置参数
      1.3 MotionEvent和TouchSlop
      1.4 VelocityTracker 、GestureDectector 和 Scroller
    2. View的滑动
      2.1 使用scrollTo / scrollBy
      2.2 使用动画
      2.3 改变布局参数
      2.4 各种滑动方式的对比
    3. 弹性滑动
      3.1 使用Scroller
      3.2 通过动画
      3.3 使用延时策略
    4. View的事件分发机制
      4.1 点击事件的传递规则
      4.2 事件分发的源码解析
    5. View的滑动冲突
      5.1 常见的滑动冲突场景
      5.2 滑动冲突的处理规则
      5.3 滑动冲突的解决方式

    第四章 View的工作原理

    1. 初识 ViewRoot 和 DecordView
    2. 理解MeasureSpec
      2.1 MeasureSpec
      2.2 MeasureSpec 和 LayoutParams的对应关系
    3. View的工作过程
      3.1 measure过程
      3.2 layout过程
      3.3 draw过程
    4. 自定义View
      4.1 自定义View的分类
      4.2 自定义View须知
      4.3 自定义View示例
      4.4 自定义View的思想

    第五章 理解RemoteViews

    1. RemoteViews的应用
      1.1 RemoteViews在通知栏上的应用
      1.2 在桌面小部件上的应用
      1.3 PendingIntent概述
    2. RemoteViews的内部机制
    3. RemoteViews的意义

    第六章 Android Drawable

    1. Drawable简介
    2. Drawable 的分类
      2.1 BitmapDrawable
      2.2 ShapeDrawable
      2.3 LayerDrawable
      2.4 StateListDrawable
      2.5 LevelListDrawable
      2.6 TransitionDrawable
      2.7 InsertDrawable
      2.8 ScaleDrawable
      2.9 ClipDrawable
    3. 自定义Drawable

    第七章 Android 动画升入分析

    1. View动画
      1.1 View动画的种类
      1.2 自定义View动画
      1.3 帧动画
    2. View动画的特殊使用场景
      2.1 LayoutAnimation
      2.2 Activity的切换效果
    3. 属性动画
      3.1 使用属性动画
      3.2 理解插值器和估值器
      3.3 属性动画的监听器
      3.4 对任意属性做动画
      3.5 属性动画的工作原理
    4. 使用动画注意事项

    第八章 理解Window 和 WindowManager

    1. Window和WindowManager
    2. Window的内部机制
      2.1 Window 的添加过程
      2.2 Window 的删除过程
      2.3 Window 的更新过程
    3. Window的创建过程
      3.1 Activity的Window创建过程
      3.2 Dialog的Window创建过程
      3.3 Toast的Window创建过程

    第九章 四大组件的工作过程

    1. 四大组件的运行状态
    2. Activity的工作过程
    3. Service的工作过程
      3.1 Service的启动过程
      3.2 Service的绑定过程
    4. BroadcastReceiver的工作过程
      4.1 广播的注册过程
      4.2 广播的发送和接收过程
    5. ContentProvier的工作过程

    第十章 Android 消息机制

    1. Android的消息机制概述
    2. Android的消息机制分析
      2.1 ThreadLocal的工作原理
      2.2 消息队列的工作原理
      2.3 Lopper的工作原理
      2.4 Handler的工作原理
    3. 主线程的消息循环

    第十一章 Android 的线程和线程池

    1. 主线程和子线程
    2. Android中线程的形态
      2.1 AsyncTask
      2.2 AsyncTask的工作原理
      2.3 HandlerThread
      2.4 IntentService
    3. Android中的线程池
      3.1 ThreadPoolExecutor
      3.2 线程池的分类

    第十二章 Bitmap的加载和Cache

    1. Bitmap的高效加载
    2. Android中的缓存策略
      2.1 LruCache
      2.2 DisLruCache
      2.3 ImageLoader
    3. ImageLoader的使用
      3.1 照片墙效果
      3.2 优化列表的卡顿现象

    第十三章 综合技术

    1. 使用CrashHandler来获取应用的crash信息
    2. 使用mutidex来解决方法数越界
    3. Android的动态加载技术
    4. 反编译初步
      4.1 使用dex2jar 和jd-gui反编译apk
      4.2 使用apktool对apk进行二次打包

    第十四章 JNI 与NDK编程

    1. JNI的开发流程
    2. NDK的开发流程
    3. JNI的数据类型和类型签名
    4. 调用Java方法的流程

    第十五章 Android性能优化

    1. Android 性能优化的方法
      1.1 布局优化
      1.2 绘制优化
      1.3 内存泄漏优化
      1.4 响应速度优化和ANR日志分析
      1.5 ListView 和 Bitmap优化
      1.6 线程优化
      1.7 一些性能优化建议
    2. 内存泄漏分析指MAT工具
    3. 提高程序的可维护性

    相关文章

      网友评论

          本文标题:Android开发艺术探索阅读笔记(目录)

          本文链接:https://www.haomeiwen.com/subject/uwfglktx.html