自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李岳锋的专栏

0 warnings, 0 errors

  • 博客(117)
  • 资源 (8)
  • 收藏
  • 关注

原创 正确使用Kotlin动态代理

说到设计模式,想必很多老手,上来都会熟练的讲上几个,动态代理,想必会是其中之一,动态代理很多中高级Android程序员,都是得心应手,因为著名网络框架Retrofit,有使用该设计模式,但你真的知道如何在kotlin中使用动态代理吗?如果没用过,可能会踩坑。如果用过且熟练,则不建议阅读,可以省下时间。

2023-05-09 16:33:51 1225 2

原创 Android setText 出现文本重叠的问题

Android setText文本重叠

2022-07-29 15:06:22 1952 1

原创 红黑树的时间复杂度分析

一、红黑树的基本属性。红黑树的每个结点,要么是黑色,要么是红色,不可能是黄色或其它颜色。根结点(root)一定是黑色,简称为黑头。所有红色结点不可以直接相邻。 也即是,如果一个结点为红色,那么,它的爸爸或儿子,一定就是黑色,不可是红色。符合,绿帽定律。所有空结点,都是黑色。所谓的空结点,就是当红黑树的某一个叶子结点下,没有其它结点,那么这个结点,就是空结点,用NIL 或 NULL 表示。...

2020-04-23 11:26:29 26858 12

原创 Java Skeletal Implementation/Abstract Interfaces(骨架实现/抽象接口)

注:skeletal implementation,下文,全部简称SI。一、接口与抽象类的优劣。接口,可以实现多继承,但抽象类不行。抽象类,可以有实现,但接口不行。我们先一步一步来,先举一个,用接口的例子,再通过分析例子,一步一步进行讲解。二、使用接口,规范相同行为。 假设,我们要做一个苹果自动贩卖机(自动贩卖机简称贩卖机)和葡萄贩卖机。那么,良好的代码设计,肯定不是一上来...

2018-07-03 20:26:01 763 2

原创 Android 内存优化策略

本篇博客,主要向你说明,以下两个问题:为什么要内存优化?如何进行内存优化(方法有哪些)?一、为什么要内存优化? 因为Android平台和Java语言本身的某些特性的缘故,在开发过程中,如果不注意这些特性。可能会导致内存消耗,比其它平台(IOS)和开发语言(C/C++)多得多。所以,我们需要最大化的去避免,额外的内存开销和泄露。所以,通过了解这些特性,并合理的组织你的代码,来减少A...

2018-07-02 19:15:31 1214

原创 Windows下配置MySQL(5.7.21)数据库

大好的周末,本该是打机、出游、睡觉的好时机。撸主,却在这里写博客… … 吊丝,注孤老。不管怎么样,希望,这篇文章,能帮到你。一、下载MySQL。 我下的是mysql-5.7.21-winx64。这是MySQL的下载地址:https://dev.mysql.com/downloads/mysql/ 。在里面找到对应你的系统和位数的版本下载即可。二、解压MySQL。 找一个位置,最好是磁盘...

2018-03-25 17:57:18 10714 2

原创 Android 如何运用MVP模式开发(以封装Login模块为例)

前言:本文将会,向你介绍如何在android开发中运用MVP模式,来解藕并提高代码的复用。现在,如果不采用个什么模式来开发,就像当年不染个五彩缤纷的杀玛特头发一样,显得与时代格格不入。虽然以前没有染发加入杀玛一族,导致追悔莫及。但是,这次得把握住机会,紧追时代潮流,加入MVP模式开发一族(MVP沙文主义:凡是不用MVP模式开发的,都是在耍流氓)。代码注释用英文写的,目的是练习英文。用的都是比较...

2018-03-01 15:01:51 1067 2

原创 对RxJava2理解的总结

前言: 如果你在看过诸多RxJava2相关的文章,仍然对RxJava2没有一个整体的认识的话,可以看一下这篇文章。全篇,以问答的形式,由简入繁,一步步带你认识RxJava2。如果你还没有学过RxJava2,那可以参考这篇 :RxJava 2.x 入门教程1、什么是RxJava2? 答:RxJava2是一个工具,也是一个库。2、什么是工具或是库? 答:工具,就是用来做事的。比如,剪刀可...

2018-02-28 17:59:45 2480

原创 Android 如何封装网络框架(以封装OkHttp为例)

前言: 现在,在网络方面,安卓主流是采用Retrofit + RxJava2的组合。但是,天天用别人封好的东西,总不是办法。就好像天天去大宝健,总不如找个漂亮的女朋友好(有人说,有漂亮的女友,谁还去大宝健。。那就太年轻了,妻不如妾,妾不如妓,妓不如偷,偷不如偷不着)。虽然自己水平有限,但做人如果没有理想,那与咸鱼有什么区别。所以,冒着被喷成狗的风险,我毅然决然的写下这篇博客。毕竟骂不死我的,只会...

2018-02-27 16:28:32 1638 2

原创 Android Room DataBase(一)

前言:众所周知,安卓原生的Sqlite数据库的操作不仅冗余麻烦,而且操作过程容易出问题。所以,后续github上出现了许多开源的封装了Sqlite的第三方library,来帮助你简化操作数据库,摆脱Sqlite的魔掌。比如,举世闻名的GreenDao。又比如,白痴化不需写Sql语句的Realm。又比如…. 。Anyway, 谷歌也注意到这个问题。所以,推出了Room DataBase,来解决这...

2018-02-22 14:20:10 8450

转载 platform-tools\adb.exe,start-server' failed -- run manually if necessary,adb启动失败,端口被占用

转载自:http://blog.sina.com.cn/s/blog_8fd5421d0101dnlg.html经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be executed.遇到问题描述:运行android程序控制台

2016-05-11 11:55:08 18561 2

原创 Android Studio 代理

那么,gradle的根目录在哪里呢?

2024-03-25 21:50:26 348

原创 【PWM】PhoneWindowManager之Power键事件处理。

PhoneWIndowManager之Power键处理

2023-08-08 17:02:34 419

原创 常见Git命令

Git,常见的,添加/删除/修改/回滚,等操作的使用。

2023-08-04 14:50:23 1077

原创 WSL2安装google chrome浏览器

wsl2安装chrome浏览器

2023-07-26 16:42:33 976 1

原创 《深入理解Kotlin协程》知识点汇总

kotlin

2023-02-22 20:03:10 219

原创 Android Studio Dolphin 带来全新的Logcat功能,赶紧来瞧一波!

Logcat,一直是安卓开发所不可或缺的功能之一。通过Locat,我们可以快速定位问题,协助我们分析问题,包括定位崩溃等。在谷歌新发布的Dolphin版本中,Logcat得到了质的提升,让我们一起来学习一下,有哪些新features,来帮助我们提高开发效率。如果你不喜欢默认的格式化排版,可以通过点击小红框处的按钮,选择模式,这个更接近旧版的格式。如果觉得这个也不满足你的要求,可以选择,来自定义排版。

2022-10-18 21:05:00 2276 1

原创 Profiler内存泄露实际案例分析

Profiler内存泄露分析,系统卡顿分析。

2022-08-26 17:36:57 1555 1

原创 setBinding(new Binding([gradle: this]))报错

setBinding(new Binding([gradle: this]))报错

2022-07-30 20:50:13 1506 1

原创 Android Gradle kapt 与 annotationProcessor

kapt、annotationProcessor

2022-07-18 15:50:01 1510

原创 dimen目录匹配规则

竖屏状态:屏幕宽度/屏幕密度横屏状态:屏幕高度/屏幕密度调试:可通过adb shell size查看分辨率、adb shell density xxx(160/240/480等)修改密度、adb shell density reset 重置密度。比如,手机情况下:是否横屏:是分辨率:1280(宽) * 720(高)密度:1.5(240/160)dp = 720/1.5=480则匹配出来的目录为:values-sw480dp...

2022-04-19 19:47:04 148

原创 adb wifi 连接设备

查看设备的wifi地址,比如:192.168.1.102使用adb命令连接:adb connect 192.168.1.102,连接成功。如果连接失败,报错:由于目标计算机积极拒绝,无法连接。(10061),则先执行:adb tcpip 5555。 将adb的端口指定为5555。【这里的端口号,以具体设备为准】再重新执行adb connect。...

2022-04-18 17:41:35 2309

原创 android studio bumblebee 创建flutter module

android studio bumblebee新版的暂不支持通过IDE来自动添加fluttermodule,但我们可以手动添加。假设需要添加flutter module的项目位于 some/path/MyApp,则通过cmd,执行以下命令,即可,前提是要确保你的flutter开发环境是配置正确的。 cd some/path/ flutter create -t module --org com.example my_flutter...

2022-03-08 10:40:20 3616

原创 Jvm原理快速复习篇

一、什么是JVM?JVM的全称是Java virtual machine,它是属于JRE(Java运行环境)的一部分。我们平时运行一个java应用程序,就是由JVM来负责管理的,每一个java应用程序都会有属于自己的JVM实例。二、JVM的组成。ClassLoader。JVM memory。Execute Engineer。二、JVM的作用。加载class文件,将class加载到JVM中。【ClassLoader】内存管理,分配内存空间,内存空间分为堆区、栈区、方法区、本地方法栈、程序

2022-02-23 16:52:10 471

原创 热修复快速复习篇

热修复原理:资源修复。通过反射的方式,创建新的AssertManager替换旧的AssertManager。【Instant Run】代码修复。基于分包原理,dvm/art在加载主dex后,当需要查找某个类时,会依次从dex包数组里面查找, 我们只要创建个新的修复类,并打包成dex放在dex数组的前头,这样虚拟机加载到该类后就会直接return掉,不会再去加载旧的有bug的类。【】动态链接修复。1. 在Native层,加载so时,跟代码替换的场景一样,优先加载。2. 代码替换System.load加

2022-02-22 15:23:07 1859

原创 Windows下,在AndoridStudio的Terminal窗口查看当前App的activity的名字和全路径

命令分2步:1. adb shell,进入shell。2. dumpsys activity top | grep ACTIVITY打印结果如下: ACTIVITY com.tencent.mm/.ui.LauncherUI ** pid=22 ACTIVITY com.tencent.mm/.plugin.appbrand.ui.AppBrandUI1 ** pid=22 ACTIVITY me.ele/.Launcher ** pid=22 ACTIVITY com.huawe

2022-01-04 11:53:01 1114

原创 多线程 快速复习篇。

对象锁,即指,同一个对象,当有多个线程【1对象 + 多线程】,都要执行被synchronized 修饰的方法或是包裹的代码块时。同一时间,只有一个线程可以进入。但如果对于多个线程,所个线程都有自己的对象【多对象 + 多线程】,则同一时间,所有线程都可以进入。类锁,不管是【1对象 + 多线程】的情况,还是,【多对象 + 多线程】的情况,同一时间,也只能有一个线程对其中的一个对象进行操作。对象锁(方法锁)。public synchronized void test(); // 方法锁,也即时对象锁。

2021-11-04 17:27:49 158

原创 数据结构/算法 快速复习篇

一、常见的数据结构.栈。先进后出,如同一口井。队列。先进先出,如同一条2头通的管道。链表。以单个或多个结点,连接在一起的方式实现。分为单链表和双链表。区别在于,单链表是每一个结点只链结下一个结点。而双链表,既连接前一个结点,也连接下一个结点。双连接更利于双向编辑,但更加占内存。具体用哪个,视使用场景来看。数组。以顺序排列的方式,依次存放数据。查找和存取快,在已知下标的情况下,存取的时间复杂度为O(1)。Map。以键值对的方式,一一对应存在。HashMap。基于Map的原理,内部是以数组+链表的

2021-11-04 16:19:46 442

原创 Okhttp 快速复习上手篇

我们先从大的角度切入,对Okhttp主要需要了解以下几个方面的知识:一、 整体框架是什么?二、 优点是什么,如何实现这些优点?一、整体框架是什么?我们先看一张Okhttp的架构图从这张图可以看出,整个Okhttp可以大致拆为:Okhttp的构建,Builder,运用了Builder模式。请求的创建,Request。请求的分发,Dispatcher。拦截器的实现,Intercepter,运用了责任链模式。网络请求的回调,Response。整个框架的核心,在于拦截器的实现。其中,对请

2021-11-04 14:23:00 204

原创 Android 事件分发快速复习篇

事件分发依据自上而下,层层分发的原则。最顶层,最先接收到Touch事件的View是decorView,可以通过window.getDecorView()获取。ViewGroup在进行层层分发的过程中,会依次调用以下三个方法: dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent。如果onInterceptTouchEvent拦截了事件,则会直接调用onTouchEvent。如果onInterceptTouchEvent没有拦截,则会.

2021-10-29 17:41:55 1322

原创 App启动优化调研及方案

一、 启动优化的作用。启动时间过久,会影响新老用户体验。新用户。降低新用户的留存率和应用评分。老用户。对老用户的使用造成烦扰,用户使用频率越高,影响程度越重。二、商城App与主流/竞品App的启动对比。1、测试机型:荣耀v20,无后台应用。(不同机型与使用状况,会影响启动时间)2、测试方式:Logcat过滤Displayed值,多次打开取平均值3. 启动耗时对比:测试总结:一手App在启动时间上,与竞品批批网不相上下。但比竞品蘑菇街的启动时间大了1倍有余。比主流App,微信、饿了

2021-10-26 13:38:24 284

原创 Failed to find Build Tools revision 25.0.3

打开SDK Manager,下载对应的SDK版本(25.0.3)后,重新编译一下项目就行了。

2021-09-22 17:38:55 1077

原创 Activity生命周期 快速复习篇

一、 基本的生命周期流程onCreate() -> onStart() -> onResume() -> onPause()-> onStop-> onDestroy()二、启动FirstActivity(A),然后点击跳转到SecondActivity(B)所走的生命周期流程onCreate(A)->onStart(A)->onResume(A)-onPause(A)->onCreate(B)->onStart(B)->onResume(

2021-09-02 10:42:12 157

原创 Kotlin高级特性之标准函数

序言使用Kotlin时,我们经常会用到标准库中的几个方法,也很容易弄混在什么地方,应该调用哪个方法比较合适。在这里,我们把功能和组合的方式列出来,方便巩固记忆。一、基本功能let: 1,以闭包的返回值为返回值。2,判空处理。also: 1,以自身为返回值。2,判空处理。with: 1,省去类名调用。run: 1,省去类名调用。2,以闭包的返回值为返回值apply: 1,省去类名调用。2,以自身返回值为返回值。二、简记公式let、also、with,单独记忆。run = with +

2021-08-31 14:58:36 243

原创 Android 绘制优化

序言在开发app时,我们经常会提及一个词,卡顿。因为肉眼可接受的最低流畅度,为60帧/s。所以,当1秒内无法绘制到足够的帧数时,从肉眼看,就会表现为卡顿。因此,要确保每秒能够绘制到足够的帧数,平均地讲,我们需要确保每帧的绘制时间不高于16.6ms(1s % 60 == 1000ms % 60 ~= 16.6ms)。如何尽量确保每帧的绘制时间低于这个值。我们需要先知道,究竟是什么在耗时,这样才能对症下药,而这也是我们这篇文章所要探讨的。一、GPU渲染分析。开启渲染监控。开发者模式->监控-&gt

2021-07-22 18:32:16 176 1

原创 Kotlin 各版本新特性(1.4+)

Kotlin 各版本新特性一、1.4.01. 支持SAM语法2. 带默认值的多参方法的调用优化。一、1.4.01. 支持SAM语法SAM 即 Single Abstract Method, 自打 Java 8起,lambda语法,使得java语法更加简洁。SAM就是其中的亮点之一。我们先来看一下,java的实现方式对比: interface SAM{ void test(int i);}public class Test { public static void main(

2021-05-12 16:36:28 935 1

原创 Android Studio 编译报错 Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

解决这个问题,需要了解以下知识点:一、不同的JDK。做为安卓开发程序员,我们一般会给电脑安装java,但是Android Studio也自带了java(OpenJdk)。这样,电脑上就会有两个版本的java。二、不同版本的Android Studio。Android Studio 4.2.0以下的版本,自带的java是1.8.0。Android Studio 4.2.0以上的版本,自带的java是11.0.8。三、问题分析。1、如果你的AS低于4.2.0,出现这种情况的话。点击Android

2021-05-06 19:12:34 3375 2

原创 应用报病毒A.gray.Falseloan。

如果有用360加固,在基础设置里面,把增强服务都去掉,尤其是里面的崩溃日志上报服务。即可解决。

2021-04-07 10:41:05 5510 1

原创 Android根Activity启动流程简述

序言从我们点击屏幕上的应用icon,到该应用为你展示第一个可视界面,这个过程中,Android系统究竟做了什么操作?又涉及到哪些进程整个过程是相对复杂的,我们不可能花时间去琢磨透每一行源码的作用,这样会让我们迷失在源码的海洋之中。相反,我们应该重点去关注这个过程,从大的层面,去掌握这个过程。这样,进可以深入源码之洋。退可以知此原理。我们大致的将这个过程,划分为三个主要步骤:1. 从Launcher到AMS。当我们点击屏幕上的应用icon时,Laucher发送启动应用的请求给AMS,因为Launch

2021-01-30 14:47:17 2288 3

原创 什么是Kotlin的空指针安全?

所谓的空指针安全,并不是说,在Kotlin领域不会再发生NullPoint异常,而是说,将尽可能的,把一些空指针异常,在编译期就给阻断,在编译期,在IDEA的能力范围内,配合kotlin的Null Safety Syntax,识别所有潜在的,可能发生空指针异常的代码。举个Java的栗子:String test = "test";test = null;int length = test.length();首先,这段代码明显是会抛出空指针异常,但是,IDEA在编译期,并不会报错,因为这是符合Jav

2021-01-25 11:55:18 394 1

kotlin-compiler-embeddable-1.3.61.jar

方便各位不能的朋友下载。用法参考这篇:https://blog.csdn.net/qq_40067488/article/details/104896201

2020-07-28

创建dimens工具

用来创建dimens文件,注意啊,这个不是一键创建各个尺寸版本的dimens,只是创建dp对应的dimens,一个而已。。。没必要创建多个,一个就行了,系统会自适应的。

2016-06-01

下拉刷新资料

下拉刷新资料

2016-01-18

servlet源码

此工具用语java开发。希望大家可以试、用!

2014-08-19

fname=apache-tomcat-7.0.30.zip

tomcat用于java开发,7.0以上,希望可以帮到大家!

2014-08-15

Android底层开发技术实战详解——内核、移植和驱动

Android底层开发技术实战详解——内核、移植和驱动。

2013-10-14

java泛型ppt

java泛型的介绍及其使用。

2013-10-14

C语言链表.ppt

该ppt详细的介绍了链表的基础知识,可以为想学链表的人,打下一个基础。

2013-01-15

空空如也

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

TA关注的人

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