自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Darksider博客

Keep Walking

  • 博客(64)
  • 收藏
  • 关注

原创 Android内存泄漏-LeakCanary源码原理分析

LeakCanary原理分析简介使用MAT来分析内存问题,有一些门槛,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比才能找到问题原因。 为了能够简单迅速的发现内存泄漏,Square公司基于MAT开源了LeakCanary总结来说LeakCanary是一个基于MAT用来检测内存泄漏的一个有效的简单好用的工具。不足申请大容量内存导致的OOM问题、Bitmap内存未释放问题,Service 中的内存泄漏无法检测等,需要我们用Mat。使用2.0之后只需要在gradle

2020-06-15 20:42:04 2764

原创 股票涨跌分布热力图算法

public class Main { //问题抽象 假设数组已排序 1、给定宽高 2、宽高Max 区分横向或者竖向分配 3、分配一个阈值 大于1/3时直接以当前最小宽度作为宽计算, 小于BORDER的面基的时候加上下一个值再次判断,是否大于BORDER重复 第3条 public static float BORDER = 0.25f; public static int H = 0; public static int V = 1; private static

2022-05-31 21:04:15 892 5

原创 2020面试部分总结

组件化/模块化组件化就是模块化,目的都是为了组件的重用但是他们之间粒度不同,横向纵向划分不同,组件化组件可以单独运行组件化分层之后就是平台化组件化划分依据UI、功能业务功能基础业务功能基础功能组件化划分原则单一性原则保持功能单一抽象化原则功能稳定,暴露接口改动少稳定性原则组件尽量稳定,不稳定组件依赖稳定组件而不是反过来自完备性原则尽量减少对底层依赖,方便复用Android打包流程AAPT(Android Asset Packaging Tool)工具,Android资源打包工

2020-11-07 23:48:36 181

原创 Android UI小技巧

1.文字阴影添加废话不多说,上代码:本文直接用的是style,也可以在TextView或者有文字的控件中直接使用这四种属性。<style name="ShadowStyle"> <item name="android:shadowColor">#66000000</item> <item name="android:shadowRadius">3.0</item> <item name="

2020-09-23 10:40:18 233 2

原创 莫名其妙的软键盘View内存泄漏

这个泄漏发生在我的Fragment页面销毁的时候,我既没有使用EditTextView,只有一个列表一个图片和一个视频播放View,刚看到的时候非常奇怪,我接受不了。这个问题可能发生在不同情况下,Fragment销毁只是一种然后找了一下网上有这么个解决方式:protected void fixSoftInputLeaks(final Activity activity) { //解决软键盘View内存泄漏Google的bug if (activity == null) r

2020-09-21 17:26:26 1100

原创 自定义Paging分页

自定义Paging分页

2020-09-21 16:30:26 486 2

原创 GridLayout结合RecyclerView.Adapter实现单页栅格列表的显示

xxxx

2020-09-21 14:58:02 687

原创 LeetCode每日一题,积少成多,量变到质变(最近比较忙不定期持续更新.........)

100. 相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2

2020-08-07 15:13:01 234

原创 LeetCode初级算法训练-动态规划(攻克中...)

简介上一篇 : LeetCode初级算法训练-排序和搜索下一篇 : LeetCode初级算法训练-动态规划本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。LeetCode初级算法简介如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,

2020-08-07 14:19:08 202

原创 LeetCode初级算法训练-排序和搜索(完成)

简介上一篇 : LeetCode初级算法训练-树下一篇 : LeetCode初级算法训练-xxxxx本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。LeetCode初级算法简介如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,开启你

2020-08-05 18:05:38 169

原创 LeetCode初级算法训练-树(完成)

简介上一篇 : LeetCode初级算法训练-链表下一篇 : LeetCode初级算法训练-xxxxxx本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。LeetCode初级算法简介如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,开

2020-07-08 18:19:19 210

原创 LeetCode初级算法训练-链表(完成)

简介下一篇:LeetCode初级算法训练-链表 还未开始。本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。LeetCode初级算法简介如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,开启你的算法之旅:初级算法。自己的一些思考:不要

2020-07-07 15:10:58 177

原创 LeetCode初级算法训练-字符串(完成)

简介LeetCode初级算法简介下一篇:LeetCode初级算法训练-链表 还未开始。本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,开启你的算法之旅:初级算法。自己的一些思考:不要

2020-07-07 10:22:34 336

原创 LeetCode初级算法训练-数组(完成)

简介LeetCode初级算法简介本来想重初中级和企业面试算法开始的,但是最后还是选择从基础的开始,因为我们并不是为了刷题而刷题,而是在刷题过程中锻炼一种算法思维,在大量的训练之后形成一种对算法的独特见解,培养那种对算法的的敏感度,看到题目,大脑中可以浮现一个解题蓝图,而且从初级开始慢慢建立信心,而且这也是在为后边复杂算法的解题思路打基础。如果你也想训练自己的算法思维,也可以加入我,从初级算法开始,开启你的算法之旅:初级算法。切忌:不要在看完题目后直接就看答案,然后去背题,这样行成的算法记忆是不牢固的

2020-06-28 17:21:45 317 2

原创 尝鲜:Gradle构建SpringBoot(2.3.1最新版)

风吹来的消息今天看了一篇博客Spring Boot 把 Maven 干掉了!就一直想自己构建下。生成项目进入这个网站生成SpringBoot的Demo项目。如下:导出项目之后解压放到某个目录下然后倒入IDEA。导入项目选择open,然后选择你的解压好的项目,一般解压好就叫demo,冲突的话自己改名。然后选择一个JDK环境就OK了直接下一步。图中右下角的问题是因为我的gradle版本太高了我的idea版本太低导致的,但是设置的版本太低或者不是指定版本的就会报错如下图:所以为了避

2020-06-24 18:12:39 2188

原创 Android Persistent常驻内存分析

Persistence常驻内存分析简介通过官方注释我知道该属性用于是否让你的应用一直处于运行状态(通常说的常驻内存)。设置android:persistent属性为true的app具有如下特点:在系统启动的时候会被系统启动起来。在该app被强制杀掉后系统会重新启动该app,这种情况只针对系统内置app,第三方安装的app不会被重启这个地方在9.0以后包括9.0我不知道是否还有效,看源码我有点困惑。这里我们分析的代码是Android10.0的源码。使用在AndroidManifest文件下

2020-06-23 17:03:11 3373 18

原创 Flutter键盘弹出关闭监听

遇到问题在使用PinCodeField验证码控件的时候遇到一个问题,在Android上边,点击返回或者点击键盘右上角的关闭键盘是不会触发PinCodeField失去焦点的所以导致关闭键盘之后,PinCodeField一直处于获取焦点的状态,无法再次点击使PinCodeField获取焦点弹出键盘,所以我们要监听键盘的弹出和关闭去设置相应的焦点状态。解决方案第一种使用keyboard_visibility三方库keyboard_visibility键盘弹出关闭监听这个开发者已经很久没更新了,所以我把代

2020-06-22 15:55:50 6477

原创 设计模式六大设计原则

优化代码第一步——单一职责原则**单一职责原则**Single Responsibility Principle(SRP)。 就一个类而言,应该仅有一个引起它变化的原因。

2020-06-20 13:54:55 140

原创 Dalvik和ART编译方式的演进以及Android N混合编译对热修复的影响

简介在 Android 中,Java 类被转换成 DEX 字节码。DEX 字节码通过 ART 或者 Dalvik 转换成机器码。而DEX 字节码 转换成机器码的编译方式,ART 和 Dalvik是不同的:Dalvik 使用 JIT(Just in time)编译而 ART 使用 AOT(Ahead of time)编译。而ART虚拟机在编译方式在7.0之后变成了AOT+JIT混合方式。为啥要了解因为Android中的热修复等技术会受到编译方式的影响,导致老的热修复方式失效。具体的影响还没有去看,后

2020-06-16 17:54:22 865

原创 RxJava中遇到的坑持续更新...

RxJava中遇到的坑1.线程无限创建在轮询的请求中使用.subscribeOn(Schedulers.io())可能会导致无限创建线程问题。Schedulers是RxJava的主要组件之一。负责在不同线程上执行Observable的操作,便于将耗时任务分摊到其他线程。我们这里需要连了解下Schedulers下的Scheduler的属性:IOScheduler最常见的调度器之一。用于IO相关操作。比如网络请求和文件操作。IO 调度器背后由线程池支撑。它首先创建一个工作线程,可以复用于其他操作。

2020-06-16 16:21:01 1572

原创 Android ANR问题产生和分析

ANR产生原因1.ANR(Application Not Response 应用程序无响应)。2.如果 Android 应用的界面线程处于阻塞状态的时间过长,会触发“应用无响应”(ANR) 错误。如果应用位于前台,系统会向用户显示一个对话框,如下图所示。ANR 对话框会为用户提供强行退出应用的选项。3.何时会触发InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件BroadcastQueue Timeout :在执行前台广播(BroadcastReceive

2020-06-15 13:08:18 809

原创 Android卡顿分析

Systrace生成trace.html分析卡顿python Library/Android/sdk/platform-tools/systrace/systrace.py -t 20 sched gfx view wm am app webview -a "com.xxx.xxx" -o /Users/xxx/Desktop/mytrace.html指定参数-t:指定统计时间为20s。shced:cpu调度信息。gfx:图形信息。view:视图。wm:窗口管理。am:活动管理。app:

2020-06-11 15:31:35 548

原创 (3)MQTT在Android端应用

前言我们搭建好并测通了MQTT.fx的Broker服务器,现在我们想要用Android客户点去和服务器通信。和Android通信有一套已有的库就是Paho Android Service。Paho Android Service是一个基于Java语言的Paho MQTT库开发的MQTT客户端服务包。接入在build.gradle中添加仓库地址maven { url "https://repo.eclipse.org/content/repositories/paho-snapsho

2020-06-04 17:12:15 870

原创 (2)MQTT客户端连接测试

前言通过文章(1)搭建好了ActiveMQ服务并启动之后,我们需要通过MQTT客户端测试连通性。下载MQTT客户端MQTT下载地址根据自己的需求下载相应的客户端我下载的是dmg也就是Mac下的客户端。配置和使用安装软件成功后打开。认识界面配置服务器http://192.168.1.94:8161/admin/ 或者是http://127.0.0.1:8161/admin/ 这是管理后台的地址。要想查看broker服务器的地址需要打开/Users/xxx/activeMq/ap

2020-06-03 14:33:43 2578

原创 (1)MQTT ActiveMQ 服务器搭建

ActiveMQ下载1.ActiveMQ下载链接从他的首页进去下载不了所以从上边这个地址进去可以下载ActiveMQ启动停止重启下载完成后解压到一个你熟悉的文件夹下边cd /Users/xxx/activeMq/apache-activemq-5.15.13/bin/macosx/执行activemq start然后提示:关闭activemq stop重新启动activemq restart最后在浏览器中打开:http://127.0.0.1:8161/admin/用户

2020-06-03 11:49:10 718

原创 Android生成和内置一个系统App

内置一个App到系统目录生成系统应用和配置1.Android系统签名,两种方式对Apk重新签名libconscrypt_openjdk_jni.dylib 是signapk.jar执行需要的动态库,是编译安卓源码生成的 mac环境在Android/aosp/out/host/darwin-x86/lib64/目录下,重新签名需要用到。platform.x509.pem 和 platform.pk8 为rom的证书,秘钥等信息,如果不一致会安装不了。使用signapk.jar和系统签名信息重新

2020-06-03 10:43:20 1622

原创 MQTT在IOT领域的应用以及如何搭建一套IOT服务到设备的系统(持续更新...)

应用中文文档

2020-05-29 16:09:46 1112

原创 Android平台版本信息

Android平台信息平台版本版本名称SDK版本9Pie288.1Oreo278.0Oreo267.1Nougat257.0Nougat246.0Marshmallow235.1Lollipop225.0Lollipop214.4KitKat194.3Jelly Bean184.2.xJelly Bean174.1.xJelly Bean164.0.3-4.0.4

2020-05-26 16:58:45 248

原创 For security reasons, WebView is not allowed in privileged processes

Hook解决系统应用不能创建WebView问题分析问题首先我们在系统应用中创建WebView的时候会报UnsupportedOperationException异常并会抛出一个问题:“For security reasons, WebView is not allowed in privileged processes”我们根据抛出的问题去https://cs.android.com/源码网站找到和WebView相关的类找到类中具体抛出错误的代码如下:@UnsupportedAppUsage

2020-05-25 19:28:04 2155 2

原创 Android平台架构

平台架构Android 是一种基于 Linux 的开放源代码软件栈,为各类设备和机型而创建。下图所示为 Android 平台的主要组件。系统应用Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信

2020-05-25 18:30:13 537

原创 Jenkins搭建集成部署与使用

Jenkins安装下载地址:https://jenkins.io/zh/安装文档:https://jenkins.io/zh/doc/pipeline/tour/getting-started/按照默认的推荐完成安装即可。插件和全局配置jdk配置android sdk配置android ndk配置gradle配置git配置这些就不多说了,本地的话应该都有了,如果部署到远程服务器上的话得安装一下。安装Jenkins插件Manage Jenkins >> Manage Plu

2020-05-25 17:33:03 491

原创 Android适配-最小宽度限定符

1、为什么要适配Android 的 系统碎片化、机型以及屏幕尺寸碎片化、屏幕分辨率碎片化严重,我们急需一种更优适配方式能够让界面视图在每个设备上能够正常显示。2、适配相关知识概念物理像素点(px) : 代表的是手机的物理像素点密度无关像素(dp): 密度无关像素等于160dpi 屏幕上的一个物理像素,这是系统的基线密度屏幕密度(dpi) : 屏幕每英寸上的像素点,Android 将所有的屏幕密度分组为6中通用密度:低(ldpi), 中(mdpi), 高(hdpi), 超高(xhdpi),xxhd

2020-05-25 14:44:15 2155

原创 Gradle常用配置和操作

生成Jar包android{...}task makeJar(type: Copy) { delete 'build/libs/syssdk.jar' from('build/intermediates/intermediate-jars/release/')//jar文件来源 into('build/libs/') //生成路径 include('classes.jar') rename('classes.jar', 'syssdk.jar') //命名

2020-05-20 15:22:04 661

原创 Android个人使用adb命令总结(持续更新...)

常用命令关闭Appadb shell am force-stop 包名启动Appadb shell am start -n com.android.settings/.Settings列出包名 加 | grep xxxx 过滤adb shell pm list packages查找相关包的信息包括查找启动Activityadb shell dumpsys package | grep xxxx查找相应包信息中的版本号adb shell dumpsys pack

2020-05-20 11:16:41 396

原创 Flutter开发中遇到的问题和解决方法(持续更新)

前言Flutter电子书正文支持Cookies的webview_flutter 已合并最新版本 0.3.19+8 webview_flutter原始项目//在yaml文件里直接依赖不要通过basemodule间接依赖webview_flutter: git: url: [email protected]:Darksiderlyd/plugins.git re...

2020-02-26 11:59:09 1595 2

原创 基于原生SwipeRefreshLayout修改为横向刷新组件

网上有很多横向滑动的组件但是都是自己去实现的。于是我就想能不能偷个懒直接用原生的改一下哈哈。结果还真行。只不过可能不支持ListView。ViewGroup(RecyclerView)都是可以的,要是想支持ListView自己去实现下他们提供的OnChildScrollUpCallback中的canChildScrollLeft方法判断是否能从左边往右边滑动,top被我改成了Left因为是横向滑动...

2019-11-29 16:14:12 699

原创 IDEA中打Jar包的正确姿势

IDEA 中打Jar包方式,包括输出Jar包依赖第三方Jar包方式1.添加需要依赖的Jar包到库中2.command + ; 打开 Project Structure 或者点击File中也可以 选中module 在需要的jar包上打钩 添加依赖3.如果直接使用第3步就可以成功,那以上两步都是废话 安全起见都搞一下。command + ; 再次打开Project Structure再次打...

2019-01-29 17:07:43 3675

原创 《Head First 设计模式》下载

下载地址 密码:yftu

2017-11-08 17:10:37 650

原创 观察者模式

认识观察者模式《Head First 设计模式》非常通俗易懂,生动活泼的向我们展示了,各种设计模式,同样观察者模式,也使用《Head First 设计模式》中的小栗子,来解释什么是观察者模式。先看一下报社和订户的栗子:报社的业务就是出版报纸。向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来

2017-11-08 17:03:40 363

原创 Java基本类型简介

整数型 基本数据类型 位 bit(字节) long 64位 8bit int 32位 4bit short 16位 2bit byte 8位 1bit浮点型 基本数据类型 位 bit(字节) float 32位 4bit double 64位 8bit字符型 基本数据类型 位 bit(字节)

2017-11-07 11:35:37 229

空空如也

空空如也

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

TA关注的人

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