自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android:启动流程

其实严格来说,Binder 机制不一定要多线程,所谓的 Binder 线程只不过是在循环读取 Binder 驱动的消息而已,只注册一个 Binder 线程也是可以工作的,比如 service manager就是这样的。引导程序是运行的第一个程序,因此它是针 对特定的主板与芯片的。使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空 间:包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控 制设定、进程优先级、进程组号等。

2023-04-11 15:11:13 1067

原创 Android:自定义UI预览设备

适配多机型UI时,如果边写边呈现是最好的,但Android机型尺寸之丰富不是所有都能提供的,这也就需要自定义。

2022-11-30 22:06:54 760

原创 Android:Binder思考笔记

binder学习笔记~一个进程空间分为用户空间与内核空间。用户空间与内核空间都是虚拟内存,映射到物理内存。所有进程的内核空间映射到同一块物理内存,是共享的二者区别:进程间,用户空间的数据不可共享,即用户空间=不可共享空间进程间,内核空间的数据可共享,所以内核空间=可共享空间进程内用户空间与内核空间进行交互需要系统调用,主要函数copy_from_user():将用户空间的数据拷贝到内核空间copy_to_user():将内核空间的数据拷贝到用户空间传统的进程间通讯方式A

2022-11-15 20:27:34 568

原创 Android bug修复记录

Android bug 修复记录

2022-11-07 16:03:56 677

原创 自定义圆角控件

自定义圆角控件

2022-09-12 18:33:53 455

原创 Android 启动模式梳理

启动模式整理

2022-07-26 21:05:24 471

原创 调试手段:SystemProperty

老代码整理中发现的用法,可以设置一些系统属性

2022-07-12 14:24:47 178

原创 Android:分包配置

如标题锁说,本篇文字主要总结Android分包的配置,不需要理解或深入,用的时候直接配置即可。通过splits配置gradle,使打包更区别化。

2022-05-15 10:29:40 1971 3

原创 Android:进程运行中被收回权限

流程如图:MainActivity 跳转至 MainActivity2 再跳转至 MainActivity3MainActivity3跳转至 设置,收回权限一路返回运行log如下// 一路跳转,打开设置,收回权限com.miss.soullink E/MainActivity: == onCreate == 25149com.miss.soullink E/MainActivity: == onCreate == savedInstanceState nullcom.miss..

2021-10-27 15:52:00 1958

原创 Android pad适配札记

题引:随着国产平板的崛起,越来越多的应用开始适配平板。Android系统的开源注定了它产品的多样性,iOS平板只有固定几个尺寸适配较为简单。但Android平板不一样,尺寸随心所欲。很多手机竖屏的应用在平板上有更多的展示方式,适配变得更加艰难!(本文主要写些关于平板适配的心得,以及与设计对线后的感悟!)细细想想适配的点有哪些:dp 与 px资源的读取关于 dp 与 px 的处理Android尺寸五花八门,计算出来的宽高dp也有很多种 // 计算函数 private fun g

2021-10-15 17:16:53 2016

原创 Android:常用工具

开发常用工具类

2021-10-12 15:43:43 153

原创 Android :adb常用命令

设备相关// 查看已连接的设备adb devices// 云测连接连接某个设备adb connect (设备)// 例子adb connect debug2.testin.cn:4556// 断开某个设备adb disconnect 192.168.1.61// 断开全部设备adb disconnect 安装 apk// 安装 apkadb install (apk路径)// 卸载 apkadb uninstall(apk包名)清除应用数据与缓存adb shell pm

2021-10-07 16:25:22 89

原创 Android:RecyclerView数据采集、埋点

需求数据埋点,要采集列表里显示的所有卡片。展开讲就是进入界面时把所有已展示的item统计出来,滑动时把新展示的item再统计进来代码实现/** * 创建人:linmutang * 创建时间:9/29/21 */interface OnExposeListener { /** * 返回刚出现的item数组 * @param list MutableList<Int> */ fun onItemViewVisible(list:

2021-09-30 18:13:21 388

原创 SoundPoolUtil封装

SoundPool更适合一些小的音频,在Application中初始化,后面随调随用,比较简单。Android 开发文档地址package com.tencent.codemouse.util;import android.media.AudioManager;import android.media.SoundPool;import com.tencent.abcmouse.R;import com.tencent.abcmouse.util.GlobalContext;import ja

2021-09-15 22:35:06 469

原创 api 与 implement 的区别

implementation可以让 module在编译时隐藏自己使用的依赖,但是在运行时这个依赖对所有模块是可见的。举个例子// 在 build.gradle(app) 中添加implementation project(':lib-one')// 在 build.gradle(lib-one) 中添加implementation project(':lib-two')如此一来,lib-one 可以使用 lib-two 中的类,app 可以使用 lib-one 中的类,但 app 不能使用

2021-07-27 10:37:15 991

原创 Android:submodule使用

引入假定我们有两个项目:Cup 和 Water,其中 Cup 表示主项目,而 Water 表示子模块项目。其中 Cup 的远程仓库地址为 [email protected]:SkyMissT/Cup.git而 Water 的远程仓库地址为 [email protected]:SkyMissT/Water.git接下来,我们希望在 Cup 中添加 Water ,而又保持 Water 自身独立的版本控制。创建 submodule使用 git submodule add <submodule_url>

2021-07-23 11:48:15 1298 1

原创 Jetpack学习:Lifecycle

远古监听生命周期方式// 接口定义public interface LifeListener { void onCreate(); void onDestroy(); void onResume();}// 实现类public class Book implements LifeListener{ private final String TAG = Book.class.getSimpleName(); @Override pu

2021-07-21 23:00:17 119 3

原创 Mac 配置Android ADB命令

Mac 配置Android ADB命令进入当前用户的home目录:$ cd ~/创建 .bash_profiletouch .bash_profile打开 .bash_profileopen .bash_profile在文件填写内容 ANDROID_HOME 后面是 sdk 的路径export ANDROID_HOME=...../Android/sdkexport PATH=${PATH}:${ANDROID_HOME}/toolsexport PATH=${PA

2021-07-19 20:55:39 423 3

原创 Kotlin学习笔记(一)

var 与 val/** * 可变变量 var * var <标识符> : <类型> = <初始值> * * * 不可变量 val 类似 final * val <标识符> : <类型> = <初始值> */class Test { val name1:String ="A" var age = 18}编译之后的样子public final cla

2021-07-15 23:41:01 176 1

原创 开发中遇到的各种问题

您没有权限来打开应用程序Mac 系统版本11.4 Big Sur ,现象如下图解决方案:打开命令行,输入命令sudo xattr -rd com.apple.quarantine 拖入文件回车执行

2021-07-14 12:14:26 75

原创 AIDL基本使用

1. 先创建要交互的bean类,实现 Parcelable 接口package com.miss.protobufdemo;import android.os.Parcel;import android.os.Parcelable;public class Book implements Parcelable { private String name; private int price; protected Book(Parcel in) { nam

2021-07-11 15:00:38 416

原创 Android Studio 编辑区不显示代码

现象如图,点击左边的文件中间编辑区不显示!!!重启Android studio无效!!!重启电脑无效!!!清缓存无效!!!解决办法:此时 Android studio 右下角会出现红色感叹号,里面会提示原因,按着操作即可。。。我的问题是插件与AS冲突,disable就好了。。。。虚惊一场...

2021-07-08 20:35:07 976 3

原创 网络代理问题:Task :prepareKotlinBuildScriptModel UP-TO-DATE

错误代码如下> Task :prepareKotlinBuildScriptModel UP-TO-DATEIOException: https://dl.google.com/android/repository/addons_list-3.xmljava.net.ConnectException: Connection refused: connectIOException: https://dl.google.com/android/repository/addons_list-2.xm

2021-07-06 19:54:59 14069 1

原创 数据压缩:protobuf 的使用

本文概要:protobuf 是什么,与 json 区别protobuf 使用方式性能对比资料补充protobuf 是什么先看官方定义protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松

2021-07-04 21:49:09 3427 2

原创 RxJava:线程切换

subscribeOn Observable.create( // 自定义source new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { e.o

2021-05-23 21:33:36 940

原创 Android 性能优化:卡顿分析与布局优化

继上篇继续性能优化,本文概要:卡顿分析卡顿原因卡顿分析工具APP层面监控布局优化层及优化过度渲染布局加载优化卡顿分析卡顿原因大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。Android系统每隔大概16.6ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。如果某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无

2021-05-09 10:59:39 623 2

原创 Android 性能优化:启动速度优化

本文主要探讨以下几个问题:启动方式启动流程中可优化的环节检测工具优化点黑白屏问题启动方式应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动冷启动(启动优化目标)冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。热启动在热启动中,系统的所有工作就是将 Activity 带到前台。只要应用的所有 Activity 仍驻留在内存中,应用就不必重复执行对象初始化、布局加载和绘制。温

2021-05-08 11:18:48 354 7

原创 Android 性能优化:OOM与Leakcanary

本文主要探讨以下几个问题:Android内存泄漏常见场景以及解决方案Leakcanary 使用及原理Android内存泄漏常见场景以及解决方案资源性对象未关闭对于资源性对象不再使用时,应该立即调用它的close()函数,将其关闭,然后再置为null。例如Bitmap等资源未关闭会造成内存泄漏,此时我们应该在Activity销毁时及时关闭。注册对象未注销例如BraodcastReceiver、EventBus未注销造成的内存泄漏,我们应该在Activity销毁时及时注销。类的静态变量持有大

2021-05-06 16:10:59 223 2

原创 Binder面试总结

多进程的优势突破进程内存限制规避内存泄漏隔离风险【字节】binder有什么优势【腾讯】binder如何做到一次拷贝通过mmap,发送方的内核空间与接收方的用户空间有一块内存是共享的,接收方可以直接去拿;共享内存与binder用的都是mmap,共享内存是发送方与接收方同时映射到一块内存,容易死锁,binder则是把发送方的数据放到内核空间,如此是发送方的内核空间与接收方的用户空间实现共享【阿里】binder机制是如何跨进程的进程隔离所以不能直接通信,但是内核空间是共享的,所以发送方可以把

2021-05-03 16:35:25 214 4

原创 自定义view:深入理解事件分发机制与处理

本文主要探讨下面几个问题:学习事件分发机制是为了解决什么问题事件冲突事件只有一个,多个人想要处理,处理的对象不是我们想给的对象就是事件冲突。如上图,RecyclerView 的父布局是ViewPager,...

2021-04-16 17:17:51 263

原创 自定义View:嵌套滑动深入理解

本文主要探讨以下几个问题:嵌套滑动设计目的嵌套滑动的实现嵌套滑动与事件分发机制嵌套滑动设计目的不知道大家有没有注意过淘宝APP首页的二级联动,滑动的商品的时候上面类别也会滑动,滑动过程中类别模块停了商品还能继续滑动。也就是说滑动的是view,ViewGroup也会跟着滑动。如果用事件分发机制处理也能处理,但会及其麻烦。那用NestedScroll会咋样?嵌套滑动的实现事件分发...

2021-04-14 22:57:02 1491 4

原创 自定义View:流式布局FlewLayout

基本概念自定义view主要分两种:自定义view:在没有现成的view需要自己去实现的时候,就使用自定义view。一般继承自View、SurfaceViewhuo其他的view自定义viewGroup:一般是利用现有的组件根据特定的布局组成新的组件,一般继承自ViewGroup或各种Layout自定义view从实现角度思考包含什么,布局、显示、交互布局:onLayout 、 onMeasure / Layout:ViewGroup显示:onDraw :canvas paint matrix

2021-04-13 12:30:51 340

原创 多线程与并发:synchronized与面试总结

synchronized的实现原理Synchronized在JVM里的实现都是基于进入和退出Monitor对象来实现方法同步和代码块同步,虽然具体实现细节不一样,但是都可以通过成对的MonitorEnter和MonitorExit指令来实现。对与同步代码块MonitorEnter指令插入在同步代码块的开始位置,当代码执行到该指令时将会尝试获取该对象Monitor的所有权即尝试获得该对象的锁,而monitorExit指令则插入在方法结束处和异常处,JVM保证每个MonitorEnter必须有对应的Mon

2021-04-08 17:50:43 174

原创 多线程与并发:从JMM设计中理解volatile

JMM :Java Memory Model要理解JMM,要先从计算机底层开始如果我们计算一次a+b所需要的的时间:CPU读取内存获得a,100纳秒CPU读取内存获得b,100纳秒CPU执行一条指令 a+b ,0.6纳秒也就是说主要的时间花费在CPU读取内存上了,所以在当代CPU里面引入了高速缓存...

2021-04-08 15:55:17 151

原创 多线程与并发:AQS深入理解

本文主要探讨下列几个问题:AQS设计初衷资源占用的标识、重入标识设计设计模式多线程处理(CLH)一个栗子AQS设计初衷比如有这么个场景:有四个线程由于业务需求需要同时占用某资源,但该资源在同一个时刻只能被其中唯一线程所独占。那么问题来了,怎么标识资源已经被占用?若支持可重入,怎么标识冲入次数?对于争夺资源的线程怎么设计,是公平锁还是非公平锁?怎么判断上一个线程是否已经释放资源?这就是AQS的设计初衷了。AQS 是一个集同步状态管理、线程阻塞、线程释放及队列管理功能与一身的同步框架。其核

2021-04-05 22:07:13 206

原创 大象放冰箱的艺术:模板方法模式

定义:模板方法模式的意图是,定义一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。我们最常见的就是Spring框架里的各种Template。举个栗子:把东西放到冰箱需要几步?打开冰箱把东西放到冰箱关上冰箱抽象类如下public abstract class AbstractCarry { public abstract void open(); public abstract void ca.

2021-04-05 10:24:01 153 4

原创 多线程与并发:Thread

本文主要探讨以下几个问题:线程的创建线程的生命周期线程安全问题常见面试题线程的创建线程的创建方式有且仅有2种继承Thread类实现Runnable接口交给Thread执行有源码证明区别:单继承,实现接口更灵活线程的生命周期Java中线程的状态分为6种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如ma

2021-04-04 11:00:34 92

原创 多线程与并发:ThreadLocal深入理解

本文主要探讨以下几个问题:ThreadLocal是为解决什么问题而存在用锁机制实现的ThreadLocal有什么问题源码阅读剖析ThreadLocal 设计初衷多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的

2021-04-03 22:57:13 183 2

原创 Java:泛型入门与理解

Signature 是其中最重要的一项属性,作用是存储一个方法在字节码层面的特征签名,这个属性中保存的参数类型不是原生类型,而是包括了参数化类型的信息。Signature属性的出现,Java泛型擦除法所谓的擦除,只是对方法的Code属性中的字节码进行擦除,实际上元数据中还是保留了泛型信息,这也是我们能通过反射手段获取参数化类型的根本依据。:因为泛型类中泛型参数的实例化是在定义泛型类型对象(ArrayList)的时候指定的,而静态成员是不需要使用对象来调用的,所有对象都没创建,如何确定这个泛型参数是什么。

2021-04-02 17:59:53 113

原创 多线程与并发:线程池与阻塞队列

为什么要用线程池降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度。少了创建线程、销毁线程的时间提高线程的可管理性。线程是稀缺资源,使用线程池可以统一分配、调优和监控阻塞队列阻塞队列要满足下面两点:插入:队列不满时可以插入,满了阻塞插入元素的线程移除:队列不为空时可以移除,空了阻塞取走元素的线程即生产者-消费者模式参数意义 public ThreadPoolExecutor( // 核心线程数

2021-03-02 22:11:23 343

apk反编译工具Apktool

一款手机的反编译软件,可以将smali文件转为Java文件

2021-07-08

SourceInsight.zip

Android source insight ,SourceInsight_V3.5.83.0_Setup.exe

2020-07-21

空空如也

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

TA关注的人

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