Android
Android学习技术文档
戒不掉的码瘾
业精于勤,荒于嬉;骐骥一跃,不能十步;驽马十驾,功在不舍
展开
-
Jetpack入坑(二)LiveData源码分析
LiveData是一个可观察的数据存储器。它可以通过观察者Observer与LifecycleOwner配对来感知数据依附组件的生命周期状态,只会把更新通知发给活跃的观察者,所谓活跃就是观察者处于STARTED或者RESUMED状态而没有DESTROYED。既然是数组存储器,他是如何更新数据呢LiveData有postValue()和setValue()方法去更新数据。postVal...原创 2020-04-27 12:27:10 · 237 阅读 · 0 评论 -
Jetpack入坑(一)Lifecycle基础理解篇
Jetpack已经出来很久了,然而我才......(一万个理由已经备好)。学习Android之初,最先接触的就是Activity,学习了她从哪里来到哪里去,了解了她的一生。在Jetpack中组件的一生是靠Lifecycle来管理。以下示例代码均基于AndroidX+Kotlin。Lifecycle是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,...原创 2020-04-26 13:29:59 · 394 阅读 · 0 评论 -
性能优化(一)UI绘制优化
CPU和GPU工作流程CPU 的任务繁多,做逻辑计算外,还要做内存管理、显示操作,因此 在实际运算的时候性能会大打折扣,在没有 GPU 的时代,不能显示复 杂的图形,其运算速度远跟不上今天复杂三维游戏的要求。即使 CPU 的工作频率超过 2GHz 或更高,对它绘制图形提高也不大。这时 GPU 的设计就出来了,CPU把计算的结果显示丢给GPU了。黄色的 Control 为控制器,用于协调...原创 2019-04-25 11:17:52 · 623 阅读 · 0 评论 -
Activity生命周期启动流程启动模式
Activity1、activity启动流程:————》点击App的icon————》在Laucher的onClick方法中,调用startActivitySafely方法(Laucher继承于Activity)————》startActivitySafely方法中携带一个intent,intent中包含着我们在AndroidManifest.xml注册的 ...原创 2019-05-07 09:22:58 · 310 阅读 · 0 评论 -
Android组件化之gradle配置
1、统一管理SDK以及依赖的版本 gradle是用groovy语言编写的,也可以在gradle中定义变量打印值输出,我们可以在项目中新建一个gradle文件来定义sdk以及应用包名等。ext { //false:组件模式 true:集成模式 isModule=false android = [ compileSdkVersion...原创 2019-05-24 22:16:00 · 908 阅读 · 0 评论 -
ARouter(一)简单使用
demo场景:app模块主页面分别跳转购物车模块页面和个人中心模块,个人中心模块跳转主界面和购物车模块,购物车模块跳转个人中心模块和主界面框架地址:ARouter使用步骤:1、在项目的build.gradle文件中2、分别在module的build.gradle中填加(如果某个module没有填加会报错There is no route match the path)...原创 2019-05-30 14:49:52 · 2219 阅读 · 0 评论 -
三次握手和四次挥手
三次握手握手之前客户端处于 closed 的状态,服务端处于 listen 状态。第一次握手:客户端给服务端发一个SYN报文,并指明客户端的初始化序列号ISN(c),此时客户端处于SYN_SEND状态。服务端收到该SYN报,服务端可以确认客户端的发送能力和服务端接收能力正常;第二次握手:服务器收到客户端的SYN报文之后,也指定自己的初始化序列号ISN(s),同时会把客户端...转载 2019-05-31 10:00:48 · 174 阅读 · 0 评论 -
Android蓝牙
蓝牙Android 平台包含蓝牙网络堆栈支持,凭借此项支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。 这些 API 允许应用以无线方式连接到其他蓝牙设备,从而实现点到点和多点无线功能。使用 Bluetooth API,Android 应用可执行以下操作: 扫描其他蓝牙设备 查询本地蓝牙适配器...翻译 2019-05-28 16:59:36 · 567 阅读 · 0 评论 -
JVM、Dalvik和ART
JVMJVM是Java Virual Machine(Java虚拟机)的缩写,是在实际计算机上仿真模拟虚构出来的的计算机。JVM是Java程序运行的容器同时也是操作系统的一个进程。JVM在整个JDK中处于最底层,负责与操作系统的交互,用来屏蔽啊哦做系统环境,提供一个完整的Java运行环境。JVM能够运行通过编译器编译成Java字节码文件的编程语言。JVM执行程序的过程:加载...原创 2019-06-03 16:31:43 · 635 阅读 · 0 评论 -
Android插件化——Small框架
0x01 前言Android插件化框架一直以来就是安卓平台上的一个重要技术方向,从携程的DynamicAPK到360RePlugin再到阿里巴巴的Atlas,甚至美团和滴滴的安卓团队都有自己的一套安卓插件化解决方案。面对业界如此热门的技术方向,在对比业界开源的插件化方案后,团队内部于去年10月份开始(2017.10)在项目中选择开源的Small插件化框架进行了尝试。鞋是否合适需要穿上脚才能知道...转载 2019-07-13 13:10:31 · 948 阅读 · 0 评论 -
Android 低功耗蓝牙开发
初识低功耗蓝牙Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的 API, 应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。Android BLE 使用的蓝牙协议是 GATT 协议,有关该协议的详细内容可以参见蓝牙官方文...转载 2019-07-04 14:12:26 · 2683 阅读 · 1 评论 -
Android图片压缩详解
简介由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有oom,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oo...转载 2019-07-18 10:54:00 · 490 阅读 · 0 评论 -
哈夫曼(Haffman)编码
哈夫曼编码又称赫夫曼编码,是赫夫曼为了解决当年远距离通信(主要是电报)的数据传输的最优化问题提出的。哈夫曼编码是一种可变字长的编码方式,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。哈夫曼树如何绘制哈夫曼树呢?假设我们在网络传输一段文字CADABCADAEFC,一般会转换为二进制0和1进行传输。字母 A B C D E F二进制 ...原创 2019-07-22 11:16:49 · 2493 阅读 · 0 评论 -
Android反编译apk
一、准备必要工具 工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具1.1、使用工具apktool(资源文件获取) dex2jar(源码文件获取) jd-gui(源码查看)1.2、工具介绍 apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar 作用:将apk...转载 2019-08-05 11:07:15 · 166 阅读 · 0 评论 -
adb命令安装apk到手机
1、首先手机连接电脑 验证是否连接成功:win+R打开运行,输入cmd打开dos命令窗口,输入命令adb devices会展示所有连接的device2、安装apk 手机连接成功后,输入adb install (apk路径)\(apk名字).apk...原创 2019-08-05 09:36:58 · 465 阅读 · 0 评论 -
Gradle配置apk命名
打包时间获取//getTimeZone(id)这个id可以是GMT+8:北京时间 也可以是所在城市 我这里是杭州def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZone("Asia/Hangzhou"))}在android{}下applicationVariants.a...原创 2019-08-16 10:09:55 · 397 阅读 · 0 评论 -
App启动流程
系统启动:1、打开电源,引导芯片代码加载引导程序Boot Loader到RAM中去执行;2、BootLoader把操作系统拉起来;3、Linux 内核启动开始系统设置,找到一个init.rc文件启动初始化进程4、init进程初始化和启动属性服务,之后开启Zygote(英译受精卵,此意孵化器)进程5、Zygote开始创建JVM并注册JNI方法,开启SystemServer6、...原创 2019-04-24 13:29:49 · 140 阅读 · 0 评论 -
性能优化(二)内存优化
说起内存我们要先了解JAVA虚拟机JAVA虚拟机java虚拟机在运行程序时会在内存空间分配一块区域用于程序的运行,虚拟机又会把这一块区域划分为若干个不同的数据块线程私有:程序计数器、虚拟机栈、本地方法栈;共享数据区:方法区、java堆。程序计数器相当于一个执行代码的指示器,用来确认下一行执行代码的地址,每个线程都有一个,没有OOM的区。虚拟机栈:我们平常所说的栈...原创 2019-04-28 14:58:40 · 1528 阅读 · 0 评论 -
SpannableString实现TextView多文字颜色显示
我们在开发过程中有时候需要在同一个TextView中显示多种文字颜色,比较常见的比如:回复XX评论,@XXX等。 这种实现我们可以结合SpannableString来选取TextView的某一段字符显示不同的颜色: /** * 文本变色处理 * * @param desc * @param commentUserNickname */原创 2017-03-24 14:21:04 · 788 阅读 · 0 评论 -
仿微信语音接听黑屏亮屏
Android系统自带有11种传感器,我们可以通过距离传感器来实现。创建传感器管理器: /** * 传感器 */ private SensorManager sm; //设备的电源控制器 private PowerManager mPowerManager; //唤醒锁 private PowerManager.Wake原创 2018-01-03 16:15:30 · 1990 阅读 · 0 评论 -
Android文件存储
* App独立文件:* 一般保存在手机SD卡(Environment.getExternalStorageDirectory() SD根目录:/mnt/sdcard/),* 不随APP卸载后仍保留,保存一些照片截图什么的* APP专属文件:* 保存分两部分,一部分保存在internal storage(内...原创 2018-07-17 15:55:18 · 220 阅读 · 0 评论 -
Android应用识别支付宝收款二维码直接跳转支付宝转账界面
我们知道应用可以通过scheme跳转应用,支付宝的schemeprivate static final String URL_FORMAT = "intent://platformapi/startapp?saId=10000007&" + "clientVersion=3.7.0.0718&qrcode=htt...原创 2018-09-05 11:24:39 · 21469 阅读 · 8 评论 -
onTouch,onClick,onLongClick事件触发分析
最后因为自定义View用到了事件分发的知识,于是就取典总结记录了一下,今天先总结一下onTouch,onClick,onLongClick事件发生先后顺序和关联,大家可以交流一下。首先onTouch()方法是解析view被触摸的三种状态down、move、up,onClick,onLongClick事件都是根据down和up状态返回值决定触发或者不触发。第一种情况:onTouch返回false原创 2016-10-18 15:45:43 · 1965 阅读 · 0 评论 -
Hook技术拦截跳转登录
其实现在的开发中大多支持游客模式,但是一些需要绑定用户的模块就需要用户登录,这时候用Hook就方便多了。1、确定Hook点 确定Hook点的原则就是生命周期比较长,不会轻易重新创建,一般寻找静态变量和单例。劫持登录就需要Hook到页面跳转的静态变量调用者,下面我们根据startActivity方法去寻找Hook点(此处查找源码为Android23,在26版本静态变量有变化...原创 2018-09-10 14:41:46 · 2288 阅读 · 0 评论 -
1像素Activity进程保活
Android8.0马上就要发布,Google对于安卓市场上各种应用占据内存空间的问题不断进行内存完善,我们的应用进程很难再保持不死之身,以前的服务唤醒在5.0已经失效,现在我们尽可能的做到保活方式就是提高进程的优先级,本文介绍一种1像素Activity保活进程的实现(据说QQ也在用)。 其整个逻辑就是在手机屏幕黑屏时,我们启动一个1像素的Activity,其占用内存很小毕竟只有1像素嘛,无形中减原创 2017-07-10 11:34:46 · 9663 阅读 · 4 评论 -
图片三级缓存
我们在开发中用了许多加载图片的框架都封装了缓存机制,图片的三级缓存的核心类就是LruCache类,尝试手写三级缓存工具类:/** * 自定义的加载网络图片工具:三级缓存 * @author wangk * */public class MyBitmapUtils { private Context context; private LruCache<String, Bitmap原创 2017-05-22 15:23:49 · 578 阅读 · 0 评论 -
Android 6.0动态设置用户权限
感谢博主西门吃雪(http://www.cnblogs.com/xmcx1995/p/5870191.html)对流程讲得比较详细,先收藏!转载 2016-11-15 17:13:05 · 361 阅读 · 0 评论 -
Android比较数据大小
在开发过程中,为了避免一些异常数据影响我们的程序,经常需要进行一些数据超出范围的比较,我们就会遇到很多字符串转换为基本数据类型或者基本数据类型之间的转换,比较麻烦和繁琐。Google给我们提供了一个BigDecimal类,可以忽视类型转换:BigDecimal bigDecimal = new BigDecimal(A);int result = bigDecimal.compareTo(new原创 2016-11-15 17:04:28 · 2814 阅读 · 0 评论 -
Math类概述
在安卓开发过程中,比较经常使用到Math这个类的一些常量或者方法,闲暇之余就对文档进行翻译阅读总结了一下: 一、Math介绍 在安卓运算中,Math提供了基本的数学常数,如三角函数、指数、对数运算的双曲函数等。 二、Math常量 Math有两个常量: 1、E 最接近于E的双值,自然对数的基数。 2、PI 其实就是圆周率,多在自定义控件有角度时使用。 三翻译 2016-11-15 13:55:29 · 547 阅读 · 0 评论 -
动态加载Gif图-Glide
为增加炫彩效果,现在很多App欢迎页都展示的Gif图,Glide的出现让这个小功能也变得越来越简单:Glide.with(context).load(R.drawable.welcome) .listener(new RequestListener<Integer, GlideDrawable>() { @Override public bool原创 2016-11-14 15:07:07 · 1960 阅读 · 0 评论 -
EditText相关InputType的动态设置
在项目中需要动态设置EditText的输入类型为numberDecimal时,单单设置InputType.TYPE_NUMBER_FLAG_DECIMAL 并不能起到作用,必须同时设置InputType.TYPE_CLASS_NUMBER| InputType.TYPE_NUMBER_FLAG_DECIMAL附上其他的type设置Constant Value D...原创 2019-01-14 13:58:51 · 2799 阅读 · 0 评论 -
List的removeAll()方法失效
开发中我们经常会遇到集合的增删操作,在使用removeAll方法时会发现在基本数据类型的集合都没问题,当我们操作对象集合时会发现没有删除,查看list的removeAll方法 public boolean removeAll(Collection<?> c) { boolean modified = false; Iterator<?>...原创 2019-04-04 10:13:54 · 3692 阅读 · 3 评论 -
Android最新面试题总结
请看Android知识图谱。基础知识 – 四大组件(生命周期,使用场景,如何启动)java基础 – 数据结构,线程,mvc框架通信 – 网络连接(HttpClient,HttpUrlConnetion),Socket数据持久化 – SQLite,SharedPreferences,ContentProvider性能优化 – 布局优化,内存优化,电量优化安全 – 数据加密,...转载 2019-04-28 09:17:39 · 303 阅读 · 0 评论 -
Android屏幕适配
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45460089; 本文出自:【张鸿洋的博客】转载 2016-12-14 19:07:49 · 220 阅读 · 0 评论