自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

有图有真相

一言不合就上源码

  • 博客(226)
  • 资源 (16)
  • 收藏
  • 关注

原创 svg使用技巧

SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。

2023-08-08 21:17:26 628

原创 Android性能优化之SharedPreference卡顿优化

下面的源码都是基于Android api 31。

2023-07-28 16:55:15 378

原创 java Thread

线程(Thread)是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程的使用有继承Thread,和传入Runnable,FutureTask等方式2、传入runnable参数3、传入FutureTask参数跟runnable不同的是通过FutureTask.get()可以获取线程执行的返回结

2022-07-03 14:04:40 718 1

原创 android AsyncTask详解

AsyncTask是Android中用来执行异步执行耗时操作的框架。继承AsyncTask,并且实现doInBackground方法。其中doInBackground中进行耗时操作,比如网络请求,文件读取等。如下方法执行AsyncTask,execute方法必须在ui线程中进行,2、AsyncTask实现从AsyncTask的execute方法进行分析启动AsyncTask的方法,源码如下AsyncTask默认的Executor是sDefaultExecutor,看下sDefaultExecutor

2022-07-03 13:47:54 1363

原创 Android service

service类型android中service分为background service,bound service,foreground servce,其中background service运行在后台与ui没有交互,bound service通过service connect可以跟activity等通过binder进行数据交互,也可以进行多进程通信。 Foreground service与notification绑定,通过notification通知用户。暂时无法在飞书文档外展示此内容1、fore

2022-05-30 11:57:11 4368 1

原创 android aidl

1、什么是aidlAidl 全称Android Interface Definition Language,Android接口定义语言,用于定义进程之间通信协议。2、进程通信Android中系统提供了很多服务,例如AlarmManager,NotificationManager等,这些服务都在system server进程中,Android中应用有自己的进程,如下图:application所在进获取服务时需要跟system server进程进程通信。当应用想要获取AlarmManger服务时可以通

2022-05-28 17:34:51 889

原创 Android弹性webview实现和冲突解决

弹性webview要实现webview上下滑动到顶部时做弹性动画,最终的实现效果如下:实现方案1、自定义弹性scrollview嵌套webview1、定义HScrollView继承NestedScrollView并且重写onTouchEvent方法,在onTouchEvent中处理动画。根据事件的顺序,可以在move事件中对scrollview进行弹性处理,在up中进行回弹处理,代码如下: override fun onTouchEvent(ev: MotionEvent): Boole

2022-05-17 18:22:33 1685

原创 webview之JSB通信原理

1、前言在这个移动互联网盛行的时代,移动应用的开发就需求量剧增,早期的移动端应用大都使用原生开发(android,ios),而现在的移动开发技术选型上基本都是混合开发(Hybrid),混合开发是一种开发模式,指使用多种开发模型开发App,通常会涉及到两大类技术:原生Native、Web H5。2、WebViewA View that displays web pages.webView是移动端(原生)提供的运行web的环境,它是一种嵌入式浏览器,原生应用可以用它来展示网络内容。可与页面JavaSc

2022-05-15 14:27:35 2472

原创 webview性能优化—webview预创建

webview性能优化

2022-05-15 11:19:30 1593

原创 BottomSheetDialogFragment实现弹出和消失自定义Spring动画

想要给BottomSheetDialogFragment的弹出和消失加spring动画1、遇到的问题由于是spring的动效,无法使用下面设置windowAnimations的方法来@Overridepublic void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); getDialog().getWindow() .getAttributes().windowAnimations = R.st

2022-05-05 11:55:51 1543

原创 可以折叠Gridview

可以折叠Gridview实现原理1、折叠实现重写gridview的setAdapter方法 @Overridepublic void setAdapter(ListAdapter adapter) { if (foldNm > 0) { //进行折叠 adapter = new FoldViewGridAdapter(adapter, foldNm); } super.setAdapter(adapter

2021-12-18 11:29:56 827

原创 Android调试技巧

1、定位activity有时候看到页面但是不知道页面相关的代码在哪,可以用下面两种方法快速定位1、layout inspectorLayout inspector中会已窗口的形式展示当前的activity2、adb可以通过adb打印当前显示的activity也有两种方式1、 adb -d shell dumpsys activity activities | grep mResumedActivity打印的log如下:hanking@C02CP0QNMD6V Noted-Android

2021-12-04 16:56:43 5067 2

原创 asm实现注解打印log

hanno_ _| | | | | |__| | __ _ _ __ _ __ ___ | __ |/ _` | '_ \| '_ \ / _ \| | | | (_| | | | | | | | (_) ||_| |_|\__,_|_| |_|_| |_|\___/通过字节码插件实现注解打印log,注解可以加在类上面,也可以加在方法上面,当加在类上面时会打印全部方法的log,当加在方法上面时打印当前方法的logHann

2021-12-03 15:08:43 2882

原创 自己动手写Android内存泄漏检测工具

内存泄漏检测对于Android来说主要泄漏的对象是activity和fragment,检测activity或者fragment的泄漏方式简单流程如下:上面的流程主要是:1、监听activity/fragment的生命周期的onDestroy事件。2、监听到activity/fragment的onDestroy后主动发起一次Gc,对象会在Gc后被回收,发起Gc后就可以针对对象是否被回收来判断是否有内存泄漏3、判断activity/fragment是否被回收4、如果有内存泄漏,生成一个内存泄漏的数据

2021-11-02 17:15:19 585

原创 Android clippling使用

Android clippingClipping在Android中如果多个view嵌套的会引起overdraw,很多时候一些view被覆盖了,对用户是不可见的,但是依然会进行绘制,这个时候使用clipping来进行对不可见区域进行裁剪,可以减少overdraw提高gpu的效率。如下图所示:使用clipping rectangle就可以实现对view的裁剪。使用clipping能达到的效果clipping的使用也很简单:1、裁剪出想要渲染的部分canvas.clipRect(clipRect

2021-08-22 15:41:01 519

原创 activity启动模式你所不知道的异常情况

前言虽然了解activity的四种启动模式,但是在一些复杂场景下,各种启动模式会出现的现象,以及现象的原因可能并不清楚,再加上个taskAffinity launchMode clearTaskOnLaunch 这些参数会使得更加懵逼。所以根据在实际应用中遇到的问题总结一下。task 和 Back Stack要了解activity的启动模式,必须要先了解task以及back stack,这两个概念,因为activity不同启动模式下不同表现是跟这两个密切相关的。back stack:存放activi

2021-07-11 20:46:10 683 1

原创 android中hprof文件分析

Hprof基本概念hprof最初是由J2SE支持的一种二进制堆转储格式,hprof文件保存了当前java堆上所有的内存使用信息,能够完整的反映虚拟机当前的内存状态。格式Hprof文件由FixedHead和一系列的Record组成,Record包含字符串信息、类信息、栈信息、GcRoot信息、对象信息。每个Record都是由1个字节的Tag、4个字节的Time、4个字节的Length和Body组成,Tag表示该Record的类型,Body部分为该Record的内容,长度为Length。Android

2021-04-22 15:03:33 8450

原创 Canvas加动画,实现火柴人跳绳效果

canvas加动画class PathDrawable extends Drawable implements AnimatorUpdateListener { private Path mPath; private Paint mPaint; private ValueAnimator mAnimator; public PathDrawable() { mPath = new Path(); mPaint = new Paint();

2021-04-13 19:27:35 2280 4

原创 android实现音乐跳动效果

效果图使用方法<com.masoudss.lib.DanceView android:id="@+id/danceView" android:layout_width="320dp" android:layout_height="300dp" android:layout_gravity="center" app:color_center="@color/r

2021-04-08 17:55:32 2459 2

原创 android 算法可视化(1) --冒泡排序可视化实现

前言以前写了很多算法相关的博客,每篇博客都会用word或者processing画上很多图,非常浪费时间,那时候就一直有考虑能不能使用程序来实现这种过程,不仅不用自己画那么图,而且编程实现可视化的话,还可以动态更清晰的表现算法的过程。于是查找了相关的资料和自己对算法的理解先实现一个冒泡排序的可视化,代码是Android的。效果实现看上面的动画实现主要分为三个部分,每一个数组元素的绘制遍历数组中当前元素时的绘制交换时的绘制1、每一个数组元素的绘制public class SortingV

2021-04-04 11:01:41 781

原创 adb启动失败解决

1、问题Mac中Android studio连接手机,经常连接不上,或者安装应用的时候经常掉线,报错daemon not running; starting now at tcp:5037具体报错信息如下:./adb start-serverdaemon not running; starting now at tcp:5037ADB server didn't ACKFull server startup log: /var/folders/qs/4rm57lbs2hq4xtf0_xt4x1k

2021-03-21 14:59:14 2272

原创 红米note 4x播放视频切后台返回黑屏问题

现象使用mediaPlay+TextureView播放和显示视频,在红米note4x上视频播放时切后台返回时视频区域黑屏,提示音频可以继续播放,在其他手机上播放时没有这种问题。分析解决方法参考1、https://developer.android.com/reference/android/media/MediaPlayer2、https://developer.android.com/guide/topics/media/mediaplayer...

2021-01-11 20:50:10 1215 1

原创 java多线程相关问题汇总

1、线程和进程的关系根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线...

2020-06-20 11:03:22 3012

原创 Android卡顿检测及优化

前言之前在项目中做过一些Android卡顿以及性能优化的工作,但是一直没时间总结,趁着这段时间把这部分总结一下。卡顿在应用开发中如果留意到log的话有时候可能会发下下面的log信息:I/Choreographer(1200): Skipped 60 frames! The application may be doing too much work on its main thread.在大部分Android平台的设备上,Android系统是16ms刷新一次,也就是一秒钟60帧。要达到这种刷新

2020-06-19 15:47:44 6865 1

原创 tinker热更新原理

什么是 Tinker?Tinker 是一个开源项目(Github链接),它是微信官方的 Android 热补丁解决方案,它支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。热更新方案比较当前市面的热补丁方案有很多,其中比较出名的有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。1、AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的;2、Robust兼容性与成功率

2020-06-04 16:57:24 2112

原创 三幅图弄懂EventBus核心原理

前言好多分析EventBus的文章,喜欢上来就贴源码,我看了好多次总是迷迷糊糊的,这次花时间彻底整理一下EventBus,发现EventBus核心其实就是三幅图,这三幅图涉及的是三个HashMap表,弄懂这三幅图那么EventBus就懂了。第一幅图subscriptionsByEventType1、第一幅图typesBySubscriber先看一段在activity中注册和反注册Even...

2020-04-16 16:34:50 3214 2

原创 图解Android中的Binder机制

前言Binder做为Android中核心机制,对于理解Android系统是必不可少的,关于binder的文章也有很多,但是每次看总感觉看的不是很懂,到底什么才是binder机制?为什么要使用binder机制?binder机制又是怎样运行的呢?这些问题只是了解binder机制是不够的,需要从Android的整体系统出发来分析,在我找了很多资料后,真正的弄懂了binder机制,相信看完这篇文章大家也...

2020-04-05 23:17:35 20309 17

原创 Android中Handler问题汇总

前言handler机制几乎是Android面试时必问的问题,虽然看过很多次handler源码,但是有些面试官问的问题却不一定能够回答出来,趁着机会总结一下面试中所覆盖的handler知识点。1、讲讲 Handler 的底层实现原理?要理解handler的实现原理,其实最重要的是理解Looper的实现原理,Looper才是实现handler机制的核心。任何一个handler在使用sendMes...

2020-04-04 16:56:20 1771

原创 Android编译器Dalvik vs ART

DalvikDalvik是Just In Time(JIT)编译器,也就是说及时编译器。在Dalvik编译器中,只有当前需要执行的代码才会变编译,剩下的代码在后面要使用的时候才会被编译。Dalvik仅仅只是编译运行时需要的部分代码,不会一次把所有的代码进行编译,所以会使用很少的手机内存空间。JIT框架JIT编译JIT工作流程ARTART 又被称为Ahead Of Time(AO...

2020-04-03 21:05:43 803

原创 减少apk大小

减少资源数目移除无用资源1、使用lint工具进行检测res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]注意lint不会检测asset文件夹中的文件2、使用shrinkResources如果如果在 app的buil...

2019-12-18 10:17:42 1106

原创 android高级进阶之12条代码优化以及性能优化

从去年七月份(2018/7/13)入职到现在(2019/8/15)已经一年多了,这一年从一个菜鸟开始慢慢学习到了很多东西,记录一下在开发过程中遇到的代码优化和性能优化经验,方便让其他人少走弯路。性能优化1、装箱带来的内存消耗Boolean isShow =new Boolean(true) ; 上面的代码会带来如下问题:上面的意思总结一下就是,采用装箱在java 5及以上是没必要的...

2019-08-17 18:23:38 1145 2

原创 Android屏幕适配总结

前言好久之前就想写一篇跟屏幕适配相关的文章一直没有动笔,这次下决心抽周末的时间结合我在实际项目中所遇到的问题写一篇博客。Android中各种尺寸单位的区别Android开发中会遇到各种单位:pxPixels - corresponds to actual pixels on the screen.inInches - based on the physical size of...

2019-08-12 12:43:10 697 1

原创 Android 高级进阶之overdraw分析及解决

前言最近在看Android中性能优化的,其中提到了LinearLayout会引起overdraw,但是并没有具体的分析原因,我自己查找了一些资料从LinearLayout的绘制等方面来说明为什么使用LinearLayout会引起overdraw和哪些情况下使用LinearLayout会引起overdraw。希望大家看完之后对view的绘制和测量过程更加了解。什么是overdrawAndroi...

2019-08-06 21:23:50 2089

原创 Android松耦合监听前后台切换框架

应用处于后台满足什么条件要判断当前应用是否处于后台,有个很简单的标准,当应用处于后台的时候,应用中所有的activity肯定都不处于运行中状态,并且应用所有处于运行中的activity在切后台时肯定会执行onPause方法。因此通过判断应用中所有的activity都不处于运行状态就可以知道当前应用处于后台,当有一个应用或多个activity处于运行状态时应用就处于前台。下面是很经典的activi...

2019-03-15 17:29:01 842

原创 高逼格Android转场动画

AndroidAndroid Transition Framework can be used for three main things:1、Animate activity layout content when transitioning from one activity to another.2、Animate shared elements (Hero views) in tra...

2019-03-01 15:24:40 6428 3

原创 WorkManager完全解析

前言Workmanager

2019-01-20 21:06:09 5390

原创 Room Database完全解析

前言Android数据持久层直接使用SQLite很麻烦,Google官方推出了Room, Google对room的定义:The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of ...

2019-01-18 11:46:52 9990 2

原创 6本通往高级Android开发者必看的英文书籍,附下载地址

前言看书是每个阶段进步必备的过程,要学习Android知识,成为高级Android程序员,需要非常系统的知识体系结构,看书能够帮我们从大的框架,理解整体结构。找了好长时间找到了非常好的几本外国Android方面的书籍,这些书既系统又生动,内容很好理解,绝对都是干货。我把这些书整理下来放到了GitHub上面。方面大家学习,共同进步提高。1、Android Programming Cookbook...

2019-01-09 11:32:54 2489 1

原创 Android自己搭建一个实用的SharedPreferences管理类

前言在项目中经常会用到SharedPreferences来存储一些配置信息,比如用户的账号信息等。但是当项目大了之后如果还在要使用时再单独创建和使用SharedPreferences就会造成SharedPreferences泛滥,不好管理,代码可维护性差。因此结合实际的项目经验给出一个通用的SharedPreferences管理类,把项目中所有使用到的SharedPreferences统一管理,...

2019-01-06 19:22:37 1744

原创 自己动手实现Android中的三级缓存框架

前言2018年过去了,很久之前就希望自己可以潜心研究源码,研究技术,但是空闲时间不是看电影,就是玩游戏都没有认真看技术方面的东西感觉很内疚,2019年一定要好好的研究端正态度,认真学习技术。为什么要三级缓存有时候Android应用中要获取比较大的数据,比如说图片流,短视频流等,如果每次都从网络上去请求,那么响应速度很慢的,用户体验不好。二级缓存如果把服务器拉下来的数据保存在本地数据库中,...

2019-01-01 23:20:38 1726 2

简单炫酷进度球

Android实现进度球,可以根据业务逻辑来实现自己的进度显示

2018-12-26

off格式三维模型

本文件包含了 兔子 马 猫 龙 圆形 等各种形状的off格式模型

2018-04-02

mysql-connector-java-5.0.8-bin.jar

mysql-connector-java-5.0.8-bin.jar

2017-08-18

OpenGL ES 2 for Android.pdf

OpenGL ES 2 for Android.pdf高清

2017-08-05

TCP-IP详解卷1.2.3全集

TCP-IP详解卷1.2.3全集

2017-06-16

thinking in Java

thinking in Java高清

2017-06-13

spring-framework-3.2.9.RELEASE

spring-framework

2017-05-16

LeetCode高清版本

LeetCode题目答案高清

2017-05-09

Java In A Nutshell

Java In A Nutshell 高清 英文原版

2017-04-21

经典算法flash动画演示

将各种排序、搜速算法以及各种数据结构的相关算法,(例如:二叉树的建立、构造哈夫曼树的算法模拟、邻接表表示的图的广度优先搜索等)以flash动画的形式表现,原本很复杂抽象的算法知识(例如图的遍历/搜索)变得极其通俗易懂。

2017-04-15

深入理解Java虚拟机(高清第二版)JVM高级特性与最佳实践

深入理解Java虚拟机(高清第二版)JVM高级特性与最佳实践

2017-04-08

Android更新

Android自动更新代码

2017-03-10

StrategyDemo

策略模式实例代码

2016-11-02

mvpLoginTest

这是MVP模式的一个实例

2016-10-30

ILoginTest

ILoginTest

2016-10-28

空空如也

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

TA关注的人

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