《Android开发艺术探索》初步记录

0 前言

简单的记录。

1 Activity的生命周期和启动模式

2 IPC

  • binder
    内存映射、1MB
  • socket
    更倾向于不同设备、跨网络进程之间通信
    Android每个应用会分配一个uid

2.1 多进程带来的问题

1)静态成员和单例模式失效
2)线程同步机制失效
3)sp不安全
4)application多次创建

2.2 多进程方式

intent、共享文件、持久化存储
binder相关AIDL、Messenger、ContentProvider
socket

2.3 序列化

使用intent、binder、网络请求、磁盘等需要让对象序列化
Parcelable
Serializable

2.4 其他

intent 支持传递bundle数据
bundle实现了Parcelable ( ArrayMap)

3 View的事件体系

3.1 基础知识

  • 四个顶点 相对父容器 top bottom left right 左上角 右下角顶点
  • translationX translationY View左上角相对于父容器偏移量
  • MotionEvent:move down up cancel等
    事件中获取触碰的坐标
    getX/getY :相对于当前View
    getRawX/getRawY: 相对于屏幕

TouchSlop:系统认为滑动的最小距离
VelocityTracker:手指滑动中的速度,滑动像素/时间
GestureDector:手势检测,单击、滑动、长按、双击等
Scroller:弹性滑动

3.2 View的滑动

1.scrollTo/scrollBy
滑动内容不能滑动View本身
2.动画
操作translationX translationY
View动画一样不能滑动View本身
属性动画Android3.0以上可以
3.改变布局参数LayoutParams

弹性滑动,渐进式滑动
把一次滑动分为若干小滑动,并在一个时间段完成
handler延时、sleep、scroller等等

3.3 事件分发

系统需要把一个MotionEvent传给一个具体的View
dispatchTouchEvent:用于分发事件,受当前View的onTouchEvent和子元素View的dispatchTouchEvent影响
onInterceptTouchEvent:在分发事件的内部,表示是否拦截
onTouchEvent:是否消耗事件

对一个根ViewGroup:
1.点击事件发生后,会传递给它,然后调用分发方法,如果拦截方法返回true,事件会给这个ViewGroup处理,接着调用它的处理方法
2.如果拦截返回false,就给它的子元素,然后子元素的分发方法会调用,直到被处理

传递优先级
onTouchListener > onTouchEvent > onClickListener

viewGroup默认不拦截
view默认处理返回true
view一旦拦截一个事件序列,所有事件都由他处理

Activity -> PhoneWindow -> DecorView(setContentView设置的View的父容器)
setContentView设置的View可以称为顶级View(根View)

3.4 滑动冲突

类型:
滑动方向不一致、一致、两者的嵌套

1的基本思路是根据滑动方向来选择事件给谁
滑动方向的判断有多种,可以用与水平方向夹角,获取水平高度、垂直高度的距离差等
一致的话需要根据具体的需求来看
嵌套同上

外部拦截法:
点击事件先经过父容器拦截,需要就拦截,反之不拦截
(主要是move事件),down不能拦截,拦截的话move、up不能传给子元素

内部拦截法:
让子元素判断

优先外部拦截法,好理解

4 View的工作原理

ViewRoot,View绘制三大流程都是由它完成
Activity被创建完,会将DecorView加到Window中;同时创建ViewRootImpl对象,和DecorView进行关联

MeasureSpec 测量规格
32位,前2位测量模式,后30位测量大小
测量模式:
三种
EXACTLY:父容器已经检测出View需要的精确大小,对应match_partent
AT_MOST:父容器指定了一个大小,不能大于这个值,对应wrap_parent
另一个父容器不对View进行限制

LayoutParams需要和父容器一起决定View的MeasureSpec
普通的View,MeasureSpec由父容器的MeasureSpec和自身的LayoutParams决定

自定义View
1.继承View实现onDraw方法
2.继承系统的View,如TextView
3.继承系统的ViewGroup,如LinearLayout
4.继承自定义的ViewGroup,看起来就像几个View组合在一起

注意:
1.直接继承View或ViewGruop,如上面的1,需要自己支持wrap_parent、padding
2.View内部由View.post,尽量不要用handler
3.View中如果有线程或动画,需要及时停止
4.如果有滑动冲突,处理好

5 理解RemoteViews

可以在其他进程显示,用于通知栏和桌面小部件,通过binder传到SystemServer进程;不支持自定义View

5.1 PendingIntent

它是一种挂起的intent,操作不是当前执行,通过用于间接的 Intent 跳转需求
常见的应用是广播通知后的点击事件,系统显示通知时,并没有执行,而是点击后,系统通知这个应用间接执行 PendingIntent#send() ,而不是通过当前应用执行。
给Remote设置单击事件
支持启动Activity、Service、发送广播

相同匹配规则:
两个PendingIntent内部intent相同和requestCode相同
intent的话,ComponentName和intent-filter匹配

6 Android的Drawable

表示图像,BitMapDrawable、ShapeDrawable、LayerDrawable等

7 Android动画

View动画、帧动画、属性动画

8 理解Windows和WindowManager

Window的具体实现在WMS中

WindowManager常用功能,添加View、更新View、删除View

Window和View通过View RootImpl建立联系

9 四大组件的工作过程

Android中Service学习记录
Android中广播接收器BroadcastReceiver学习
Android中ContentProvider学习记录

10 Android消息机制

Looper无限循环查找消息队列是否有消息,有则处理;没有则等待,不占用cpu
MessageQueue的next返回null的时候loop方法退出死循环,loop阻塞
不允许子线程更新ui,若加锁会过度复杂
ThreadLocal

11 Android中线程和线程池

Android中几种线程交互方式
HandlerThread
一个带有handler的线程,有消息队列,具体例子IntentService
IntentService
优先级高、执行完任务自动停止
线程池:
1.避免频繁创建、销毁的开销
2.控制最大并发数,
工作流程:
1)任务进来,先判断当前线程是否大于核心线程数,没有的话启动一个核心线程来执行任务;
2)已经超过,加入任务队列排队;
3)任务队列满了,变为最大线程数
4)线程数到了最大线程数,执行拒绝策略

12 Bitmap的加载和缓存

常用BitMap缓存LRU、DiskLruCache
缓存的增加、获取、删除
一个图片加载器需要
图片同步加载、异步加载、缓存、压缩、网络拉取,防止OOM

13 综合技术

crash
给程序设置CrashHandler,crash信息上传到服务器
动态加载-插件化
热插拔-不发新版更新某些模块
打包

14 JNI和NDK编程

NDK:让Android更方便地通过JNI来访问本地代码

15 性能优化

布局优化,include标签
绘制优化,onDraw不要做耗时任务,以及新建局部对象
内存泄漏,静态变量、单例、hanlder、资源没有及时销毁
ANR,一个进程发生了ANR,通过data/anr/trace.txt定位原因

### 回答1: 《Android开发艺术探索》是一本深入探讨Android开发核心技术的著作,由杨扬先生所著。这本书涵盖了该领域的多个方面,从Android系统背后的设计原理,到性能优化和内存管理等实际应用中的技术,都得到了详细讲解。 这本书一共分为14个章节,每个章节都介绍了一项重要的开发技术或原则。例如,书中深入讨论了Activity和Fragment的生命周期管理,以及它们之间的通信机制。此外,还介绍了多线程编程的最佳实践和Android应用的性能优化技巧。 与其他Android开发类书籍相比,这本书强调了实践性。它提供了大量的示例代码和具体的案例分析,帮助读者理解和应用所学知识。此外,该书还涉及了Android最新的开发框架和技术,如Jetpack和Kotlin语言。 《Android开发艺术探索》被广大开发者普遍认为是一本非常实用和有价值的Android开发指南。无论是初学者还是有经验的开发者,都能从中受益。这本书不仅是一本教程,更是一本帮助开发者深入理解Android设计和实现原理的指南。 总结而言,如果你是一名Android开发者,想要提升自己的技术水平并深入了解Android系统的背后运作原理,那么《Android开发艺术探索》是你值得阅读的一本著作。 ### 回答2: 《Android开发艺术探索》是一本著名的Android开发书籍,全称为《Android开发艺术探索:揭秘Android系统设计的奥秘》。该书由杨辉同学编著,由电子工业出版社出版。这本书讲述了Android开发的一些高级技术和实践经验,供开发者更深入地了解Android系统设计。 这本书对于Android开发者来说非常有价值。它不仅介绍了一些基础的Android知识,还深入探讨了一些高级的主题,例如Android系统的启动流程、内存优化、性能优化等。读者可以通过学习这些内容,提高自己的Android开发水平,写出更高效和稳定的应用程序。 《Android开发艺术探索》的特点在于它不仅仅是一本理论性的书籍,更注重实践性和指导性。书中提供了许多实际的案例和代码,让读者能够通过实际操作来理解和掌握书中的知识。同时,它还介绍了一些常见的错误和陷阱,帮助读者避免一些常见的开发问题。 总的来说,《Android开发艺术探索》是一本非常实用和有深度的Android开发书籍。读者通过阅读和实践可以提升自己的开发水平,了解和掌握Android系统设计的奥秘。无论是初学者还是有一定经验的开发者,都能够从这本书中收获很多。 ### 回答3: 《Android开发艺术探索》是一本非常经典的关于Android开发的书籍。该书由任玉刚著写,主要介绍了Android开发的一些技术和艺术探索。 《Android开发艺术探索》的目的是帮助开发者更好地理解Android系统和开发过程中的一些关键概念。书中详细讲解了Android系统的架构和原理,包括Activity、Service、Broadcast Receiver、Content Provider等组件的工作原理和使用方法。 该书还讨论了Android开发中的一些常见问题和难点。例如,性能优化、内存管理、UI优化等。书中提供了很多实际的案例和示例代码,帮助读者更好地理解和应用这些知识。 除了技术方面的内容,该书还着重强调了Android开发中的设计思路和艺术探索。作者通过讲解一些实际的应用案例,引导读者如何设计出更好的用户体验和界面设计。 总之,《Android开发艺术探索》是一本非常有价值的Android开发书籍。无论是初学者还是有一定经验的开发者,都可以从中获得很多有用的知识和经验。无论是对于技术的掌握还是对于开发思路的提升,该书都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值