自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

原创 android源码系列-消息处理

消息处理是在 ActivityThread 的main函数中启动的启动后 Looper进入循环,获取 MessageQueue中的message进行处理没有消息需要处理时调用 native 层的epoll wait 进入等待当有消息插入 MessageQueue时,唤醒Looper中的 wait 等待,进入消息处理调用 message 的 handleMessage 进行处理,如果有 callback 处理callback消息入队用了 synchronized 保证插入数据线程安全。

2023-06-05 11:55:11 69 1

原创 基础夯实系列-集合篇(下)

hashmap总体结构是一个数组+链表的结构。链表的长度大于等于8时,会转换成红黑树通过hash算法计算key的hash,然后与上数组长度-1,来计算当前key在数组上的索引找到数组上索引后,在链表上查找与key相等的元素,有就替换value,没有就插在链表尾插入的时间复杂度 O(1),查找的复杂度O(1)线程不安全当数据量超过阀值时,2倍扩容。阀值=扩容因子*数组长度可以存错key为空的元素。

2023-06-05 11:54:21 67

原创 基础夯实系列-集合篇(上)

ArrayList, LinkedList 都是线程不安全的ArrayList基于数组,LinkedList基于双向链表ArrayList 查找时间复杂度低。LinkedList 插入时间复杂度低。(特殊情况除外)ArrayList有扩容逻辑。LinkedList没有。

2023-06-05 11:54:11 55

原创 App启动优化-基于有向无环图的sdk初始化方案

Andorid端基于图的启动框架解决方案1.背景1.1 在日常开发时经常会在Application的onCreate()方法中对三方SDK,或者自己封装的SDK进行初始化。class Application{ ... onCreate(){ initSDKA(); initSDKB(); initSDKC(); .... } ...}上面是通常写法,这里总结了几个信息点初始化耗时。整体都在主线程一条线程初始化。部分机型无法充分利用cpu资源

2020-11-14 10:37:24 431

原创 Android系统匿名共享内存Ashmem

首先来看一下什么是匿名共享内存(Ashmem)。Ashmem是一种共享内存的机制,它利用了Linux的mmap系统调用,将不同进程中的同一段物理内存映射到进程各自的虚拟地址空间,从而实现高效的进程间共享。它以驱动程序的形式实现在内核空间。它有两个特点,一是能够辅助内存管理系统来有效地管理不再使用的内存块,二是它通过Binder进程间通信机制来实现进程间的内存共享。Ashmem的两个特点就是共享和高效

2017-08-11 18:21:23 1049

原创 android工具-快速打多渠道包

原理android使用的apk包的压缩方式是zip,与zip有相同的文件结构,在zip的Central directory file header中包含一个File comment区域,可以存放一些数据。File comment是zip文件如果可以正确的修改这个部分,就可以在不破坏压缩包、不用重新打包的的前提下快速的给apk文件写入自己想要的数据。 comment是在Central directo

2017-08-04 15:18:56 378

原创 Android语音开发-听筒扬声器自动切换

业务描述公司项目是做IM即时通讯的,在项目开发的过程中遇到这样一个需求:语音播放的场景下,当手机靠近面部时,显示屏熄灭,语音播放自动切换为听筒模式,当手机远离面部时,语音播放切换为扬声器模式。实现思考其实原理很简单,android手机一般都有距离感应装置,根据距离感应装置的相应回调参数去做听筒,扬声器,和屏幕点亮熄灭的操作。但是在开发中还是遇到了很多坑,下面会一一陈述。代码开发屏幕唤醒锁(WakeL

2017-04-14 17:22:59 1525

原创 java8基础学习-lambda表达式

java8基础学习-lambda表达式

2017-03-22 16:38:29 267

原创 安卓安全-apk完整性校验

crc32全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”。 它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同至于crc32的值是如何计算的以及实现原理,本文不做讲解,有兴趣的可以google。 在apk中,反编译后恶意的篡改代码重新打包主要集中在dex文件中,所以可以通过获取dex文

2016-11-24 10:46:35 2210

原创 java基础之设计模式(1)--单例模式

先贴出一些概念,对后面的讲解有一定帮助JMM(java内存模型)根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。线

2016-07-08 10:51:31 371 2

原创 android studio 编译错误解决

android studio 导入工程时编译时报错Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate e

2016-05-26 11:04:31 448

原创 java 基础知识

public class Person {/*静态块*/static{System.out.println("this is static block!");}/*非静态块*/{System.out.println("this is non-static block!");}public Person(int id) {System.out.prin

2015-10-17 10:58:35 269

原创 android 手机屏幕适配

1 常用单位 px pixel   像素 in inch  英寸 dpi dots peer inch    一英寸长度上的像素点数 ,即像素密度 dip(dp)  Density-independent-Pixel 密度无关像素  定义在 160dpi 的情况下  1dp = 1px,因此有一个计算公式  要获取一个设备的dp值时 px = dp * scale    sca

2015-05-07 16:57:18 576 1

多用户留言系统

多用户留言系统

2013-08-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除