Android
2016-12-06 23:32:00 0 举报
AI智能生成
Android是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑等。由Google成立的开放手机联盟持续领导及开发。Android系统最初由Andy Rubin开发,主要支持手机。2005年8月被Google收购后,持续改良并逐渐拓展至平板电脑及其他领域上。 Android的主要竞争对手是Apple的iOS及微软的Windows Phone系统。2013年的第四季度,Android在全球的市场份额首次超过全球市场第一的Symbian系统,跃居全球第一。 2015年,Android平台份额已经达到78.6%。
作者其他创作
大纲/内容
开源框架
okhttp
LitePal
EventBus
Glide
retrofit
第三方开源框架
okhttp
LitePal
EventBus
Glide
retrofit
通信
蓝牙操作
1、权限
BLUETOOTH_ADMIN
BLUETOOTH
2、打开蓝牙
提示用户打开蓝牙
直接打开,不提示用户
3、发现蓝牙设备
btadapter.startDiscovery
设计模式
单例
懒汉
饿汉
静态内部类
懒汉加锁
双重检测锁(DCL)
工厂
观察者
混合开发
测试
单元测试
mock
不能支持静态方法:mockito
不能支持静态方法:easymock
支持静态方法的mock,无法支持Android平台,而且不安全:Powermock
强大全面:Robolectric 框架
http://ju.outofmemory.cn/entry/268849
Java
this
对调用方法的那个对象的引用
构造器中调用构造器
性能优化
布局优化
UI渲染机制
开发者选项里,有Profile GPU Rendering
人眼感觉刘畅的要求是每秒40-60fps
一次耗时渲染需要20ms,则在16ms系统发出VSYNC信号就无法绘制,该帧会被丢弃,等待下次信号
相当于16*2ms内都是同一帧画面,让人眼感觉卡顿。
避免Overdraw
开发者选项 Enable GPU Overdraw
优化布局层级
尽量使用RelativeLayout替代LinearLayout
避免嵌套无用布局
Layout重用(include)
提高代码可维护性
降低程序冗余度
使用ViewStub实现View延迟加载
和GONE比较,效率更高,因为GONE初始化树时,已经添加在布局树上
加载方式
setVisiability
inflate(可以返回视图本身,索引子View)
Hierarchy Viewer
内存优化
JVM内存模型
获取Android系统内存信息
内存回收
内存优化实例
bitmap优化
代码优化
其他优化工具
Lint工具
代码提示工具
Memory Monitor工具
内存监视工具
TraceView工具
优化APP性能
MAT工具
分析内存状态
Dumpsys工具
分析系统状态
Android 基础
四大组件
Activity
7个生命周期方法
onCreate
onStart
onResume
onPasue
onStop
onDestroy
onRestart
Android任务栈
App启动时,如果环境中没有该APP的任务栈,系统会创建一个任务栈,保存接下来使用的Activity
Task任务栈是“后进先出”的栈模式
Activity启动模式
4种类型的启动模式
standard
singleTop
singleTask
singleInstance
2种指定启动模式的方式
AndroidMainifest.xml文件设置
Intent的Flag设置
Service
BroadcastReceiver
按接收方式分类
标准广播
有序广播
按广播范围分类
全局广播
本地广播
注册方式
静态注册
动态注册
ContentProvider
UI
布局
LinearLayout
weight
orientation
RelativeLayout
FrameLayout
子主题
数据持久化
调试
adb
异常捕获
自定义异常捕获类
使用腾讯Bugly
友盟统计
子主题
Android 底层
Android 启动模式
升级模式(Recover模式)
全量升级
差量升级
正常启动模式
Binder 机制
View
LayoutInflater 布局加载器
获取布局加载器
inflate 加载布局(返回View对象)
广泛应用于动态添加View的情景
将 res/layout/ 中的布局文件,转成对应的 View 对象,以便对该 View 对象进行后续操作,如添加数据、更改属性、添加父或子View 等。
视图绘制流程
onMeasure()
功能
测量、改变视图的大小
参数
widthMeasureSpec
specSize(大小)
specMode(规格)
EXACTLY
AT_MOST
UNSPECIFIED
heightMeasureSpec
specSize(大小)
specMode(规格)
EXACTLY
AT_MOST
UNSPECIFIED
onLayout()
功能
给视图进行布局,确定位置
onDraw()
功能
绘制视图
工具类
Paint
Canvas
总结:确定大小 -> 确定画在哪儿 -> 开始画
视图状态
enable : 是否响应onTouch事件
focused : 是否获取焦点,requestFocus
window_focused : 当前视图是否处于正在交互的窗口中,系统自动决定,应用程序不能进行改变
selected:当前视图是否处于选中状态。setSelected
pressed : 当前视图是否处于按下状态。setPressed
....
视图重绘
invalidate():强制视图重新绘制
measure和layout不会重新执行,只有draw得到执行。可以调用requestLayout(),整个流程重新执行
自定义 View
实现方式
自绘控件
组合控件
继承控件
基础
坐标系
View的坐标系
getTop()
getLeft()
getBottom()
getRight()
MotionEvent中 get 和 getRaw 的区别
event.getX();到父布局
event.getRawX();到屏幕默认坐标系
参考
https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B01%5DCoordinateSystem.md
角度和弧度
换算关系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)
角度增大方向:屏幕坐标系中角度增大方向为顺时针
参考:https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B02%5DAngleAndRadian.md
颜色
参考:https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B03%5DColor.md
颜色模式
ARGB8888 四通道高精度(32位)
ARGB4444 四通道低精度(16位)
RGB565 屏幕默认模式(16位)
Alpha8 仅有透明通道(8位)
进阶
自定义View分类与流程
参考:https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B01%5DCustomViewProcess.md
Canvas 常规操作
绘制颜色
drawColor, drawRGB, drawARGB
绘制基本形状
drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc
绘制图片
drawBitmap, drawPicture
绘制文本
drawText, drawPosText, drawTextOnPath
绘制路径
drawPath
顶点操作
drawVertices, drawBitmapMesh
画布剪裁
clipPath, clipRect
画布快照
save, restore, saveLayerXxx, restoreToCount, getSaveCount
画布变换
translate, scale, rotate, skew
translate是坐标系的移动
Matrix(矩阵)
getMatrix, setMatrix, concat
问题
https://blog.csdn.net/carson_ho/article/details/62037760
行业
航司二字码
机场三字码
热门机场
PEK(北京首都)
SHA(上海虹桥)
PVG(上海浦东)
CAN(广州白云)
SZX(深圳宝安)
CTU(成都双流)
KMG(昆明长水)
XIY(西安咸阳)
HGH(杭州萧山)
CKG(重庆江北)
CSX(长沙黄花)
XMN(厦门高崎)
NKG(南京禄口)
FOC(福州长乐)
TSN(天津滨海)
嵌入式
C语言
字符串操作
字符串拷贝
字符串切分
字符串返回
函数参数传入,并返回该指针
被调用函数使用malloc函数动态分配,调用函数中将其释放
静态局部数组
全局数组
字符串截取
Flash 驱动
条码扫描枪
性能参数
分辨率
对于条码扫描枪而言,分辨率是指成功扫描的最窄条码符号的宽度,英文是MINIMAL BAR WIDTH,缩写为MBW,单位是mil。
通常扫描枪的分辨率为5mil,4mil,3mil,分辨率越高,价格越高。选择条码扫描枪时,并不是扫描枪的分辫率越高越好,而是应根据具体应用中使用的条码密度来选取具有相应分辨率的条码扫描枪。使用中,如果所选扫描枪的分辨率过高,则条符上的污点、脱墨等也会对扫描枪的成功扫描产生影响。
通常扫描枪的分辨率为5mil,4mil,3mil,分辨率越高,价格越高。选择条码扫描枪时,并不是扫描枪的分辫率越高越好,而是应根据具体应用中使用的条码密度来选取具有相应分辨率的条码扫描枪。使用中,如果所选扫描枪的分辨率过高,则条符上的污点、脱墨等也会对扫描枪的成功扫描产生影响。
扫描景深
扫描景深是指在正确扫描条码的情况下,扫描枪允许离开条码标签表面的最远距离与扫描枪可以接近条码标签表面的最近距离两者之差,也就是条码扫描枪的有效工作范围。有的条码扫描枪在技术指标中未给出扫描景深参数,而是给出扫描距离,即扫描枪距离条码标签表面的最远和最短距离
扫描宽度-SCAN WIDTH
扫描宽度是指在给定扫描距离上扫描光束可以阅读的条码信息物理长度值。
扫描速度-SCAN SPEED
扫描速度是指单位时间内扫描光束在扫描轨迹上的扫描频率。
一次识别率
一次识别率表示的是首次扫描成功的条码数与扫描条码总次数的比值。举例来说,如果每成功扫描一个条码的信息需要扫描两次,则一次识别率为50%。从实际应用角度考虑,当然希望每次扫描都成功,但遗憾的是,由于受多种因素的影响,要求一次识别率达到100%是不可能的。 应该说明的是:一次识别率这一测试指标只适用于手持式光笔扫描识别方式。如果采用激光扫描方式,光束对条码标签的扫描频率高达每秒钟数百次,通过扫描获取的信号是重复的。
误码率
误码率是反映一个扫描枪对条码错误识别情况的极其重要的测试指标。误码率等于错误识别次数与识别总次数的比值。对于一个条码扫描枪来说,误码率是比“一次识别率”更为重要的问题。
参考
http://tieba.baidu.com/p/5087506115
git
分支
查看分支
本地分支
git branch
远程分支
git branch -r
远程+本地分支
git branch -a
创建分支
新建分支
git branch dev
合并某个分支到当前分支
git merge dev
切换分支
切换到指定分支
git checkout dev
新建分支并切换到该分支
git checkout -b dev
合并分支
git merge dev
推送分支
git push origin dev
删除分支
删除本地分支
git branch -d dev
删除远程分支
git push origin --delete dev
参考
https://blog.csdn.net/top_code/article/details/52336221
标签
打标签
git tag v1.0
查看标签
git tag
查看标签信息
git show v0.9
推送标签
git push origin v1.0
职业规划
Android
目标
深入Android技术,掌握基础知识,了解前沿
基础
Android 四大组件
Android UI
屏幕适配
布局自适应屏幕
使用 wrap_content 、match_parent、layout_weight
RelativeLayout
根据屏幕的配置来加载合适的UI布局
使用Size限定符
使用Smallest-width限定符
使用布局别名
使用Orientation限定符
确保正确的布局应用在正确的设备屏幕上
提供可以根据屏幕大小自动伸缩的图片
使用Nine-Patch图片
网络
存储
多媒体
深入
Framework
Binder
设计模式
Launcher
定义
Android系统启动加载的第一个APP,是其他APP启动的入口
组成部分
Home Screen
Work Space
ShortCut
LiveFolder
AppWidget
WallPaper
Hot Seats(底部三个按钮)
All App List(GridView),从HomeScreen进入后,一堆图标
针对 Launcher 的开发类型
开发自己的 Launcher
在 WorkSpace 做文章
添加shortcut
添加liveFolder
添加appwidget
添加壁纸
研究 Launcher 源码(APP层)
前沿
RN
weex
三端统一
热更新
插件化
NLP
目标
理解NLP中的基本知识,原理,熟悉常用的第三方库
原理
理解NLP中的基本知识,原理,熟悉常用的第三方库
内容
分类
自然语言理解☆☆☆
关键在于抓住文本特征
自然语言生成
简单的实践demo实现
实践
开发环境搭建
简单的实践demo实现
Android 屏幕适配
目标/定义
使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果
重要概念
屏幕尺寸
含义:手机对角线的物理尺寸
单位:英寸(inch),1英寸=2.54cm
Android手机常见的尺寸有5寸、5.5寸、6寸等等
屏幕分辨率
含义:手机在横向、纵向上的像素点数总和
单位:px(pixel),1px=1像素点
UI设计师的设计图会以px作为统一的计量单位
Android手机常见的分辨率:320x480、480x800、720x1280、1080x1920
屏幕像素密度
含义:每英寸的像素点数
单位:dpi(dots per ich):假设设备内每英寸有160个像素,那么该设备的屏幕像素密度=160dpi
安卓手机对于每类手机屏幕大小都有一个相应的屏幕像素密度:
屏幕尺寸(w\h)、分辨率f、像素密度d三者关系
suqr(w*w + h*h)/f = d
密度无关像素
含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。
单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果
Android开发时用dp而不是px单位设置图片大小,是Android特有的单位
假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在480x800分辨率手机上设置应为240px;在320x480的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。
在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px
独立比例像素
含义:scale-independent pixel,叫sp或sip
单位:sp
Android开发时用此单位设置文字大小,可根据字体大小首选项进行缩放
推荐使用12sp、14sp、18sp、22sp作为字体设置的大小,不推荐使用奇数和小数,容易造成精度的丢失问题;小于12sp的字体会太小导致用户看不清
参考:https://www.jianshu.com/p/ec5a1a30694b
为什么要进行Android屏幕适配
Android 碎片化严重,各种尺寸、分辨率的屏幕
屏幕适配问题的本质
使得“布局”、“布局组件”、“图片资源”、“用户界面流程”匹配不同的屏幕尺寸
使得“图片资源”匹配不同的屏幕密度
解决方案
“布局”适配
使用布局自适应屏幕尺寸(使用RelativeLayout)
根据屏幕配置加载相应的UI布局(使用限定符)
尺寸限定符(3.2之前)
最小宽度限定符:使用了layout-sw 600dp的最小宽度限定符,即无论是宽度还是高度,只要大于600dp,就采用layout-sw 600dp目录下的布局
屏幕方向限定符
布局别名
“布局组件”适配
使得布局组件自适应屏幕尺寸(使用 wrap_content、match_parent、layout_weight)
“图片资源”适配
使得图片资源自适应布局(使用自动拉伸位图 .9.png 图)
drawable 文件夹详解 https://blog.csdn.net/guolin_blog/article/details/50727753
“用户界面流程”适配
根据屏幕配置加载相应的用户界面流程
确定当前布局
根据当前布局做出响应
重复使用其他活动中的片段
处理屏幕配置变化
LayoutInflater
功能
动态加载布局,将 xml 文件转换成 View 对象
基本用法
获取实例
getLayoutInflater():最终调用第三个方法
LayoutInflater.from(context):最终调用第三个方法
getSystemService(Context.LAYOUT_INFLATER_SERVICE)
加载布局
layoutInflater.inflate(resourceId, root);
不指定父布局:View buttonView = layoutInflater.inflate(R.layout.button_layout, null);
mainLayout.addView(buttonView);
mainLayout.addView(buttonView);
指定父布局:View linear = inflater.inflate(R.layout.button, mLinear);
注意参数
root = null
内部attachToRoot失效,加载布局方法inflate返回xml根节点对应的View,此时View没有父容器,最外层layout属性失效
需要调用addView
需要调用addView
root != null
默认:attachToRoot= true
返回 Root 对应的 View,xml 根节点对应的 View 被添加到 root 中,不需要调用addView()
attachToRoot = false
inflate方法返回xml对应的根节点View,但是View的LayoutParams是由Root生成,
此时并没有添加到 root对应的父容器,需要调用 addView()
此时并没有添加到 root对应的父容器,需要调用 addView()
Android 动画
View Animation(视图动画)
Tween Animation(补间动画)
Frame Animation(逐帧动画)
Property Animator(属性动画)
ValueAnimator
ObjectAnimation
参考:https://blog.csdn.net/harvic880925/article/details/50995268
Android Debug Bridge
查看设备
adb devices
修改设备时间
adb shell date -s 20180322
安装 apk
adb install AirTrip-release.apk
//安装 apk 文件
//安装 apk 文件
adb install -r AirTrip-release.apk
//强制删除并安装
//强制删除并安装
adb -s 2IMFEWJ12F install C:\Users\yourname\Downloads\sougoushurufa_831.apk
//为指定的设备安装指定目录的apk文件
//为指定的设备安装指定目录的apk文件
adb install -s demo.apk
//安装apk文件到sd卡上????这个没有实践过!!!
//安装apk文件到sd卡上????这个没有实践过!!!
重启设备
adb reboot
adb -s 2IMFEWJ12F reboot
//多个设备连接时,重启指定的设备
//多个设备连接时,重启指定的设备
查看日志
adb logcat
adb logcat *:E
只看Error等级以上的日志(adb logcat *:W 同理,只看Warning等级以上的日志)
adb logcat -c | adb logcat
清空缓存,重新查看所有日志
adb logcat -s "BAT_Login"
查看 TAG 为 BAT_Login 的输出日志
查看 ADB 版本及安装目录
adb version
启动 Activity
adb shell am start -n +包名 + 类名
例子:adb shell am start -n com.qinggan.airtrip/.MyActivity
例子:adb shell am start -n com.qinggan.airtrip/.MyActivity
drawable 文件夹
https://blog.csdn.net/guolin_blog/article/details/50727753
https://blog.csdn.net/peidonghui/article/details/8508171
https://blog.csdn.net/myoungmeng/article/details/54090891
https://blog.csdn.net/fkq_2016/article/details/52434946
Java中可变长参数的使用及注意事项
https://www.cnblogs.com/lanxuezaipiao/p/3190673.html
0 条评论
下一页