Android进阶
- 1.版本新特性
- 1.1 Android5.0特性
- 1.1.1 Android5.0特性
- 1.1.2 Android5.0技术特性
- 1.2 Android6.0特性
- 1.2.1 Android6.0特性
- 1.2.2 Android6.0技术特性
- 1.3 Android7.0特性
- 1.3.1 Android7.0特性
- 1.4 Android8.0特性
- 1.4.1 Android8.0特性
- 1.5 Android9.0特性
- 1.5.1 Android9.0特性
- 2.Material Design
- 2.1
- 2.1.1 核心思想
- 2.2 组件(需要Design Support Library支持)
- 3.View体系及自定义View
- 3.1 View的体系
- 3.2 自定义View
- 3.2.1 坐标
- 3.2.2 滑动
- 3.2.3 属性动画
- 3.2.4 事件分发机制
- 3.2.5 View的工作机制
- 4.多线程编程
- 4.1 概念
- 4.2 线程的状态
- 4.3 创建线程
- 4.4 同步方法
- 4.5 Java内存模型
- 4.5 阻塞队列
- 4.6 线程池
- 4.6.1 创建线程池
- 4.6.2 创建线程池的种类
1.版本新特性
1.1 Android5.0特性
1.1.1 Android5.0特性
- (1)全新的MD(Material Design)设计风格
- (2)全新通知中心设计,下滑看全部通知
- (3)支持64的ART虚拟机
- (4)Overview(多任务视觉窗口)
- (5)Ok Google 语音指令
1.1.2 Android5.0技术特性
- (1)RcyclerView 替换 ListView和GridView
- (2)卡片CardView(继承自FrameLayout)
- (3)3种Notification(普通、折叠、悬挂式(5.0新增))
- (4)Toolbar与Palette(提取颜色)
1.2 Android6.0特性
1.2.1 Android6.0特性
- (1)应用管理权限
- (2)指纹识别(谷歌支持,统一)
- (3)APP Links(超链接跳转应用)
1.2.2 Android6.0技术特性
- (1)权限的使用(Normal Permission和Dangerous Permisssion)
1.3 Android7.0特性
1.3.1 Android7.0特性
- (1)多窗口模式
- (2)改进java8语言支持
- (3)快速回复(通知栏快速回复)
- (4)Daydream VR支持
- (5)Unicode9支持
- (6)Google Assistant
1.4 Android8.0特性
1.4.1 Android8.0特性
- (1)通知渠道 — Notification Channels
- (2)画中画模式 — PIP(当Activity处于PIP模式时,其实它是出在暂停状态,但其内容会继续展示)
- (3)自适应图标 — Adaptive Icons
- (4)固定快捷方式和小部件 — Pinning shortcuts(用于更快速的打开 APP 的某单一任务)
1.5 Android9.0特性
1.5.1 Android9.0特性
- (1)全面屏(支持刘海屏-凹口屏幕)
- (2)多摄像头的更多画面
- (3)GPS定位之外的WiFi定位(室内定位)
- (4)Android Dashboard(看清楚自己在受手机上都干了哪些事情,从而提醒自己是否过多的浪费了不必要的时间)
- (5)Wind Down:夜间模式
- (6)Google Assistant
2.Material Design
2.1
2.1.1 核心思想
将物理世界的体验带进屏幕,再配合虚拟世界的灵活特性,达到真实体验
- 动画
- 字体 Roboto
- 图标 一般使用48dp 48dp,必要可以放大到192dp 192dp
- 图像
2.2 组件(需要Design Support Library支持)
- 底部动作条()
- 卡片(CardView)
- 提示框(Dialogs)
- 选择器
- 滑块控件(Sliders)
- Snackbar (轻量弹出框)
- TabLayout
- TextInputLayout
- NavigationView(抽屉菜单)
- CoordinatorLayout(隐藏和折叠Toolbar)
- CollapsingToolbarLayout(结合CoordinatorLayout实现隐藏)
3.View体系及自定义View
3.1 View的体系
View的继承关系
3.2 自定义View
3.2.1 坐标
- Android 坐标(以手机屏幕左上角为原点,右X,下Y)
- View 坐标 (get方法获取对应的View位置及宽高)
3.2.2 滑动
- layout() 方法
- offsetLestAndRight和 offsetTopAndBottom
- layoutParams(改变布局参数)
- 动画的方式
- scrollTo(表示移动到具体坐标点)和scrollBy(表示移动的增量为dx、dy)-瞬间完成
- Scroller(在一定时间内完成)
3.2.3 属性动画
- ObjectAnimator(Alpha/Rotate/Translate/Scale)
- 参数1:对应的Object
- 参数2:操作的属性
- 参数3:可变的float类型数组
- ValueAnimator(不提供动画效果,通过监听AnimatorUpdateListener监听数值的变化)
- AnimationSet动画集合(play()、with、end、before方法)
- PropertyValuesHolder(组合动画)
3.2.4 事件分发机制
- dispatchTouchEvent(MotionEvent ev)
- onInterceptTouchEvent(true,交给OnTouch,false交给子控件的dispatch)
- onTouchEvent(ture消费,false返回父组件消费)
完整流程:没有事件拦截
OnTouchListener的OnTouch优先于OnTouchEvent
3.2.5 View的工作机制
- measure(测量宽高)
- MeasureSpec (int size,int mode)
- AT_MOST(最大模式)
- EXACTLY(精确模式)
- UNSPECIFIED(未指定模式)
- layout
- draw
4.多线程编程
4.1 概念
线程:操作系统最小调度单元
进程:是操作系统结构的基础,是系统进行资源分配和调度的基本单位,也可以看做是程序的实体
多线程:
线程资源:(CPU资源和锁资源)
4.2 线程的状态
- new 创建线程
- Runnable可运行状态
- Blocked 阻塞状态
- wait(交出CPU,同时释放锁资源)
- join(实际是Obiect.wait)
- sleep (交出CPU,不释放锁)
- yield(同sleep,但是不能控制交出CPU具体时间,并且只能让拥有相同优先级的线程有获取CPU的机会)
- interrputed(可以用来中断一个正处于阻塞状态的线程)
- Running
- Dead
4.3 创建线程
- 继承Thread类,重写run
- 实现Runnable接口,并重写接口的run方法
- 实现Callable接口,重写call()方法
- 接收任务的时候提供一个返回值
- 可以抛出异常
- 可以拿到Future对象,可以监听线程调用call方法的状态
4.4 同步方法
- synchronize(显示锁)
- Lock
- ReentrantLock(条件重入锁)
- volatile(修饰保证值修改后会立刻存到主存中)
4.5 Java内存模型
每个线程会有自己的本地内存,都是先将主内存中的共享变量赋值一份到本内存,进行修改,然后再存到主内存,但是不确定时间,然而被volatile修饰后,修改后会立刻存到主存中.
并发过程三个特性:原子性、可见性和有序性。
原子性:是指对基础数据类型变量的读取和赋值是原子操作,这些操作不可以被中断,要么执行完成,要么不执行(AtomicInterger)
可见性:是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的,所以一般变量用volatile修饰.
有序性:java内存模型中允许编译器和处理器对指令进行重新排序,他不会影响单线程执行的正确性,但是会影响多线程的正确性。一般变量用volatile修饰、synchronize、lock来保证有序性,
- 堆内存
- 栈内存
- 静态存储
4.5 阻塞队列
使用出场景:生产者消费者
4.6 线程池
4.6.1 创建线程池
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
corePoolSize:核心线程数
maximumPoolSize:线程池允许最大线程数
keepAliveTime:非核心线程闲置的超时时间
TimeUnit:keepAliveTime参数的时间单位(DAYS/HOURS...)
workQueue:任务队列
ThreadFactory:线程工厂
RejectedExecutionHandler:饱和策略
RejectedExecutionHandler有4种
- AbordPolicy:表示无法处理新任务,并抛RejectedExecutionException异常;
- CallerRunsPolicy:用调用者所在的线程来处理任务;
- DiscardPolicy:不能执行的任务,并将该任务删除;
- DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。
4.6.2 创建线程池的种类
- FixedThreadPool(可固定线程数的线程池)
- CachedThreadPool(一个根据需要创建线程的线程池)
- SingleThreadExecutor(单个线程的线程池)
- ScheduledThreadPool(实现定时和周期性任务的线程池)