【Android Studio安装部署系列】十八、Android studio更换APP应用图标
缘起Flutter实战
http协议详解
加密算法
postman关闭ssl证书校验设置
接口api开发中安全性问题
【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识
极光推送技术原理:移动无线网络长连接
JAVA中循环删除list中元素的方法总结
Android增量更新完全解析及多渠道解决方案
Android热修复,热更新 ,增量更新,插件化之间的区别
Android动态加载之ClassLoader详解
instant app入门和开发指南
Android 插件化和热修复知识梳理
关于Android热修复的几种解决方案
Android高新面试题2017汇总(带答案)
Android 反射机制
Android 仿美团,58 同城切换城市界面
KsonDouyinDemo
session 、cookie、token的区别及联系
JsBridge
GSYVideoPlayer
理面试细节
webviewjs
音视频技术
Android app开放接口API安全性之Token签名Sign的设计与实现
抽象类和接口的对比
音视频基础
http://note.youdao/noteshare?id=b54bff2ec796d929da936a33bd4aae4d
自定义注解—draweeViewAnnotation
要点提炼| 理解JVM之类加载机制
rxjava和rxjava2的区别
7.0 8.0版本更新安装遇到的
图片选择器
Android 7.0你需要注意的一些坑
Android 多进程编程 15问15答
什么是消息推送?
Android App消息推送 实现原理
使用okhttp的websocket实现长连接
Android-IM从零开始开发一个即时通讯项目
8.0 的部分坑及对应解决方法
Java / Android 笔试、面试 知识整理
极光推送
友盟
高德地图之逆地理编码
QQ登录
1.导入依赖jar包
2.values下添加文件
3.drawable下放入图片
4.layout下添加布局文件
5.清单文件添加两个acvitity和meta
6.页面 UMShareAPI umShareAPI = UMShareAPI.get(上下文)
umShareAPI .getPlatformInfo(上下文,SHARE_MEDIA.QQ(这只是qq),监听)
在成功方法里获取头像昵称
7.分享使用UMImage
8.回调方法
9.application中全局初始化声明,清单文件声明注册
五百丁简历
Android面试相关文章以及github整理
gitlab配置测试SSH秘钥
git - 简明指南
git 进阶tips
廖雪峰git教程
简单聊gitlab创建,合并,切换分支
TextSize为100Pixcel的宋体常规字符高度为
height = (1060 - (-340)) / 1000 * 100 = 140px
http协议:1.明文如何解决?加密:加密算法:非对称,对称,散列hash算法,base64,http加密使用社么算法核实:
双向加解密,对称和非对称——,一般选择非对称
http安全机制:问题:1.数据明文,有可能被窃取 2.数据完整性无法保证,有可能被篡改 3.通信双方的身份无法保证
Picasso,Glide,Fresco对比分析
使用OkHttp发送网络请求并将结果更新至UI的几种方式
OkHttp之网络请求流程(一)
OkHttp3源码和设计模式-1
okhttp 流程和优化的实现
RecyclerView性能优化
RecyclerView 和 ListView 性能和效果区别
JAVA-虚拟机(2)-GC算法&回收器
Android之RecyclerCoverFlow旋转木马相册的基本使用
Android 十年总结:1.5 到 10.0 都有哪些新特性?面试常问题
webview内存泄漏终极解决方案
Android WebView优化
接口和抽象类有什么区别
apply提交没有返回值,而commit提交会有一个布尔值返回判断
apply提交时异步提交到磁盘内,commit是同步数据到磁盘,都是使用editor提交,如果有apply和commit提交的话,
acommit提交会出现阻塞,只有等所有异步提交完成以后以及自己的commit提交才行,而且apply没有任何提示,
sp是在进程中是单实例的,在没有返回值的前提下,取代任何实例的apply和commit都是安全
好多有道云笔记
RecyclerView与ListView比较
Android 高级开发面试题以及答案整理
人事面试宝典
android面试题
OAuth2.0原理和验证流程分析
彻底搞懂Android文件存储—内部存储,外部存储以及各种存储路径解惑
git init 初始化
git branch 查看一下当前在哪个分支下
git checkout 切换到你要推送到的分支
git add . 添加到暂存区
git commit -m "注释"
push -u origin 分支名 推送到你切换过来的分支
git branch 新的分支名
git push -u origin 新分支 提交你得分支到新的分支里
git merage 你同桌的分支 origin/你们要合并的新分支
1、简要的谈谈Android的事件分发机制?
当点击事件发生时,首先Activity将TouchEvent传递给Window,再从Window传递给顶层View。TouchEvent会最先到达最
顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则
整个事件将会被销毁,如果dispatchTouchEvent返回 false ,则交给上层view的 onTouchEvent 方法来开始处理这个事件
,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给自身的 onTouchEvent 来处理,如果 interceptTouchEvent
返回 false ,那么事件将继续传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传
递到某一层的子 view 的 onTouchEvent 上了,且这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是
onTouchEvent 来接收,直到onTouchEvent返回true为止。而如果传递到最顶view的 onTouchEvent 也返回 false 的话
,这个事件就会消失。
减小对象的内存占用
1)使用更加轻量的数据结构
2)避免在Android里面使用Enum
3)减小Bitmap对象的内存占用
4)使用更小的图片
内存对象的重复利用
1)复用系统自带的资源(系统资源个人很少用)
2)注意在ListView/GridView等出现大量重复子组件的视图里面对ConvertView的复用(RecyclerView解决了这个问题)
3)Bitmap对象的复用( 使用 Glide库)
4)避免在onDraw方法里面执行对象的创建
5)StringBuilder 在有些时候,代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”。
避免对象的内存泄露
1)注意Activity的泄漏 通常来说,Activity的泄漏是内存泄漏里面最严重的问题,它占用的内存多,影响面广,我们需要特别注意以下
两种情况导致的Activity泄漏:
2)考虑使用Application Context而不是Activity Context
3)注意临时Bitmap对象的及时回收(本人 使用 Glide第三方)
4)注意监听器的注销
5)注意缓存容器中的对象泄漏
6)注意WebView的泄漏
7)注意Cursor对象是否及时关闭
内存使用策略优化
1)谨慎使用large heap
2)综合考虑设备内存阈值与其他因素设计合适的缓存大小
3)onLowMemory()与onTrimMemory()
4)资源文件需要选择合适的文件夹进行存放
5)Try catch某些大内存分配的操作
6)谨慎使用static对象
7)特别留意单例对象中不合理的持有
8)珍惜Services资源
9)优化布局层次,减少内存消耗
10)谨慎使用“抽象”编程
11)使用nano protobufs序列化数据
12)谨慎使用依赖注入框架
视图渲染Android系统每隔16ms就重新绘制一次Activity,即要求应用必须在16ms内完成屏幕刷新的全部逻辑操作
,这样才能达到每秒60帧,然而这个每秒帧数的参数由手机硬件所决定,现在大多数手机屏幕刷新率是60赫兹
(赫兹是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量),也就是说我们有16ms
(1000ms/60次=16.66ms)的时间去完成每帧的绘制逻辑操作,如果超过了就会出现所谓的丢帧
(比如说我们花费27ms才完成逻辑计算就可能造成丢帧)
优化网络加载图片:
实现思路:
1,判断网络环境是否为WiFi。
2,如果是则开启预缓存,当在Page1时,下载Page2的图片到本地;下拉到paga2时,图片直接从本地读取到内
存并显示,同时下载Page3到本地。以此类推
android 的渲染主要分为两个组件
1.CPU 2.GPU由这两者共同完成在屏幕上绘制
要想优化我们必须了解其原理
Activity如何将复杂的UI转换成用户看得懂的图像并绘制到屏幕上?
这是由格栅化操作完成的格栅化将字符串,按钮,路径或者形状的一些高级对象拆分到不同的像素上在屏幕上进行
显示,这是一个非常耗时的操作而手机里有一块硬件就是为了加速完成这个操作就是GPU(图像处理单元)现在
Gpu使用些基础指令集主要是多边形与纹理也就是图片
简单理解的过程
CPU在图像绘制之前向GPU输入这些指令这一过程通过OpenGL-ES
也就是说在屏幕绘制UI对象的时候都需要在CPU中转化成多边形再传递GPU进行格栅化操作
cpu将对象转换为多边形耗时 同样上传到GPU也耗时所以我们要减少对象转换次数以及上传数据的次数,幸运的
是OpenGL-ES API允许数据上传到GPU进行数据保存,当下一次绘制按钮的时候只要在CPU的存储器里引用它
所以渲染性能的优化就是尽快的上传数据到GPU尽可能长的在不修改数据的条件下保存数据
虽然android系统已经完成的大部分的优化但是还有一个问题造成了性能的影响–>过度绘制(OverDraw)
那么什么是过度绘制呢
屏幕上的某个像素点在同一帧的时间内绘制了多次
当设计上追求更华丽的视觉效果的时候,我们就容易陷入采用越来越多的层叠组件来实现这种视觉效果的怪圈。
这很容易导致大量的性能问题,为了获得最佳的性能,我们必须尽量减少Overdraw的情况发生。
我们可以通过手机设置里面的开发者选项,打开Show GPU Overdraw的选项,可以观察UI上的Overdraw情况。
也可以使用HierarchyViewer来查找Activity中的布局是否过于复杂
如何清除过度绘制的两种方法
1.从视图中清除那些不必要的背景和图片使他们不会再最终渲染图像中显示
(1).将activity中的主题背景置为空减少与xml中的背景色覆盖getwindow().setBackGroundDrawable(null);
(2).去掉不必要的布局背景图片
2.对视图中重叠的区域进行定义从而降低CPU -GPU的消耗
(1).避免绘制在最终图片中不显示的UI组件称之为剪辑,这是系统完成的但是不适合在自定义View中,
我们可以通过canvas.clipRect通过定义可见边界避免绘制被遮挡住的部分
(2).也可以通过canvas.quickReject判断给定区域是否在剪辑区域之外
3. layout刷新避免复杂的层级结构嵌套
这里我们可以通过HierarchyViewer工具来分析我们打开之后会看到下面这样的层级结构可以帮你区分出没用
的布局以及各个过程的相对速度
GIT常用命令:
git init 【初始化一个git项目】
git status 【查看当前项目状态】
git add . 【提交变动到缓存区】
git commit -m "我是注释" 【提交代码】
git push -u origin master 【提交代码到远程服务器】
git checkout 要切换的分支名称 【切换分支】
git checkout -b 你的feature名称 【切一个新的feature出来】
git branch 【查看我本地所有feature】
git branch -d 你的feature名称 【删除本地的feature】
git merge —no-ff 你的feature名称 【合并版本】
git pull 【拉取远程仓库所有的分支】
git pull 下载数据 合并数据
git push 提交数据
git branch 查看分支
git checkout develop(分支名称) 切换分支
git clone http://xxxxxxx "e://地址" 克隆下载 git地址 储存路android2018
面试官:实现方式,三种
2.第三种具体实现
futuretask和callable结合
3.线程的状态
4.线程方法:join,yield,sleep,interrupt等等
5.object方法,wait,notify,notifyall
6.wait和sleep区别
7.synchronized 同步锁,锁的是什么?
8.静态方法和非晶态方法,锁的区别
9.java并发,并行的区别
10.多线程安全呢问题
11.死锁现象,4个必要条件和解决方案
12.多线程同步
13.java并发的三个特性,原子性,可见行,有序性
14.volatile关键字
15.同步机制有几种方式:sync,以及其他方式
16.进程和线程却别
17.线程池
移动应用微信登录开发指南
Android进阶——性能优化之布局渲染原理和底层机制详解(四)
A005-AS项目结构解析
带你了解HTTP协议状态码
Android Activity启动黑/白屏原因与解决方式
Android 各类虚拟机JVM,DVM,ART区别
死锁的四个必要条件和解决办法
Java| Java并发特性: 原子性、有序性、可见性
Android 性能优化(二) —— 启动优化实战
java中进程与线程–三种实现方式
Java多线程面试题整理
Android代码混淆技术总结(一)
Java线程面试题合集(含答案)
各种典型场景下Activity的生命周期
浅谈多线程和断点续传
Android RxJava 实际应用讲解:功能防抖
Android 实现防抖动(防快速点击)的最优雅做法
Android群英传笔记——第三章:Android控件架构与自定义控件讲解
面试系列文章2018之Android部分之自定义View篇
LRU(最近最少使用页面置换算法)淘汰算法
Android 面试题总结之View(一)
“Android自定义控件”-Android面试必问"精华技能点"汇总
自定义View面试总结
安卓面试之=》自定义View
Android面试解密-自定义View
RecyclerView性能优化,相关
RecyclerView 体验优化及入坑总结
Android事件分发机制面试题
消息推送的原理
学习Kotlin(一)为什么使用Kotlin
SparseArray,atomic包,Android埋点,Java基础之注解
Android 十年总结:1.5 到 10.0 都有哪些新特性?面试常问题
一次Android面试心得及面试题总结
三级缓存+二次采样
Android精选
生产者-消费者模式的三种实现方式
okHttp原理
Handler
Service全方位了解,总有你不知道的一面
关于Android Service真正的完全详解,你需要知道的一切
序列化Serializable和Parcelable的区别详解(五分钟学会
Android 进程保活招式大全
Android 在Service中启动Activity的大坑
android 解决5.0以上不支持隐式启动服务
ipc机制在android中的实现,就是binder机制
基本原理:binder机制进行通信,不同进程间交换数据?app1的数据和app2,或者和服务端,等等端到端的通信过程
进程不一样,进程隔离,数据隔离,沙箱机制,保证每个app的数据是独立,安全的,无法共享!
进程空间分配:用户空间和内核空间 特点,用户空间的数据是无法共享的,内核空间的数据是共享的
Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念?
Android面试题目之(八) AIDL的设计原理
Android面试一天一题(Day 36:AIDL
2019 Android 高级面试题总结 从java语言到AIDL使用与原理
全面升级Android面试之Binder面试题集
android面试题-与IPC机制相关面试题
Android Binder 作为 IPC 机制原理和面试回答
Android进程间通信IPC (5星级面试题
java安全入门篇之接口验签
发布评论