自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 mongo版本升级解决占有内存过大的问题

自己有一个测试用的服务器,配置很低。年前出现几次问题,重启后就好了也就没注意。后来越来越频繁就调查了一下,发现重启后内存就一直增长直到接近100%。使用ps aux查看cpu和内存使用情况,发现mongo占用了大部分的内存,这是什么情况?mongo3.2因为服务器搭建有些年头了,mongo的版本一致没升级,停留在3.2版本上。查阅相关资料发现是默认设置导致的,mongo3.2有一段官方描述如下:WiredTiger Options–wiredTigerCacheSizeGB number

2021-11-15 17:27:27 6375

原创 如何使用Frida在Android上进行hook

前言我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件。而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同的是它依然需要root环境。本文就以Android为例来详细说说如何安装并使用它。PC端首选要在电脑上安装Frida,官方的安装步骤是

2021-11-12 16:54:37 5098

原创 如何发布Android Library到Maven私有仓库

前言在我们的项目架构中,一定存在一些基础的模块,这些模块可以在多个app上通用,这种情况我们一般会将这些模块封装成Android Library统一维护,并上传到仓库方便其他小组使用。仓库可以选择如mavenCentral这类公开的仓库,但是我们一般选择搭建自己的maven私有仓库,比如:Sonatype Nexus。本文就一步步的教大家如何将Android Library发布到maven私有仓库。添加maven仓库配置在项目的根目录下的gradle.properties中添加私有仓库的配置,如下:

2021-11-11 11:38:20 2328

原创 Unity的Flutter——UIWidgets简介及入门

介绍UIWidgets(https://github.com/UnityTech/UIWidgets)是Unity编辑器的一个插件包,可帮助开发人员通过Unity引擎来创建、调试和部署高效的跨平台应用。UIWidgets主要来自Flutter。但UIWidgets通过使用强大的Unity引擎为开发人员提供了许多新功能,显著地改进他们开发的应用性能和工作流程。效率通过使用最新的Unity渲染......

2019-09-26 11:08:15 7098 2

原创 Android 8.0 targetsdkversion升级到26填坑

Android进阶之路系列:https://blog.csdn.net/chzphoenix/column/info/16488近期因为应用市场要求,需要将targetsdkversion升级到26之前博客中我们了解过targetsdkversion的重要性,当时我们建议轻易不要改动这个参数。但是这次因为应用市场的硬性要求,我们必须做升级,那么就需要面对升级后带来的兼容性问题。...

2019-09-12 14:18:29 2157

原创 android中几种定位方式详解

目录前言:1、GPS定位2、NETWORK定位3、AGPS定位4、基站定位5、WIFI定位6、混合定位目前,移动端大致通过三种方式来进行设备定位:GPS、基站、wifi。本文就详细的讲解一下这几种定位方式和实现方法。前言:android中我们一般使用LocationManager来获取位置信息,这里面有四中provider:public static final String NETWORK_PROVIDER = "network";public stat

2019-04-19 17:13:00 12901 7

原创 探讨8.0版本下后台service存活机制及保活

Android进阶之路系列:https://blog.csdn.net/chzphoenix/column/info/16488前段时间时间对targetsdkversion进行升级,结果发现了一个问题:在不升级前,app退出后,后台service可以存活很长一段时间;而升级后,8.0以下版本手机还是一样,但是8.0及以上版本的手机上,app退出一分钟后后台service就被杀...

2018-11-20 17:22:56 8064 3

原创 动态修改android中的资源索引resId

Android进阶之路系列:http://blog.csdn.net/column/details/16488.html一、引言1、为什么要动态修改资源索引一般情况下我们不需要干预资源索引,因为gradle会自动整合项目及所有依赖的资源,再进行相关编译工作,这样资源索引不会冲突。但是如果我们在app中从另外一个apk包中获取代码或资源来使用,就有可能产生冲突。这时候就需要进行动态修改。2、怎么修改......

2018-06-05 15:52:33 6514 11

原创 Android逆向:二进制xml文件解析 之 Start Tag Chunk

《Android逆向及安全》系列专栏:https://blog.csdn.net/chzphoenix/column/info/234851、xml结构在Android中,xml文件经过编译后都是不可读的二进制文件。它的结构如图:简单说一下大概的结构:Header Chunk:8个byte,type+headersize+fileszie String Ch...

2018-06-05 15:09:40 2369

原创 resource.arsc二进制内容解析 之 Dynamic package reference

1、加载Theme出错这是一篇补充文章,在做动态替换resId的过程中,我发现bag类型的ResTable_entry在使用过程中存在问题。比如style,其parent解析一直有问题,日志如下:W/ResourceType: Failed resolving bag parent id 0x7d090062W/ResourceType: Attempt to retrieve bag 0x7d0......

2018-06-04 17:00:13 2029

原创 gradle编译打包过程 之 ProcessAndroidResources的源码分析

《利器!Android开发工具之谈》专栏系列:https://blog.csdn.net/column/details/16703.html首先,如何查看gradle源码,我们在项目里依赖com.android.tools.build:gradle即可,如下:compile gradleApi()compile 'com.android.tools.build:gradle:2.3.3'sync......

2018-06-04 15:49:44 3929

原创 resource.arsc二进制内容解析 之 RES_TABLE_TYPE_TYPE (Config List)

1、resource.arsc结构我们先来看resource.arsc的结构如图:(本来网上有一张神图,但是结构表现的不够清晰,而且比较旧了,缺少了一些新的东西,所以我根据神图自己又重新整理了一张架构图,新的东西是指Dynamic package reference,具体可以看)在package结构下可以看到有Type Spec(类型规范数据块)和Config List,这块内容是资源索引表中最重...

2018-06-04 14:57:52 1515 2

原创 ListView和GridView的缓存机制及measure过程

Android进阶之路系列:http://blog.csdn.net/column/details/16488.html在Android开发中我们经常使用ListView和GridView,它们都有一套缓存机制,通过复用防止view的不停创建。ListView和GridView都是AbsListView的子类,使用其内部类RecycleBin来进行view的缓存。1、View的Transient状......

2018-04-20 10:42:05 702

原创 Android中如何使控件保持固定宽高比

目录1、自定义view2、adjustViewBounds3、百分比布局4、ConstraintLayout我们在android开发过程中可能会遇到一种情况,一个组件需要保持固定的宽高比,但是组件本身大小却不定。尤其在android屏幕碎片化的情况下,很多时候我们需要让一个组件宽度与屏幕宽度一致,这样就无法确定宽度。那么如何让控件保持固定宽高比?有几种方法供大家选择。1、自定义view自定义view,重写onMeasure或onLayout等相关方法,通过预定的比例计算宽

2018-04-18 10:16:56 13883 2

原创 解读ImageView的wrap_content和adjustViewBounds的工作原理

ImageView是android开发过程中经常会使用的一种组件,由于android屏幕碎片化的问题,有时候我们无法设定一个具体的宽高。比如说width是match_parent的,这时候我们还想让图片在宽度完全填充并能正常显示,我们直接会想到将height设置为wrap_con......

2018-04-17 10:59:27 3019 1

原创 非UI线程下页面处理:view的postInvalidate和post对消息处理的差异化

Android进阶之路系列:http://blog.csdn.net/column/details/16488.html我们知道view有一系列post方法,用于在非UI线程中发出一些页面处理。view还有另外一个postInvalidate方法,同样在非UI线程中发起重绘。同样是在非UI线程向UI线程发出消息,但是这里面有很大的区别。1、postInvalidate先来看看postInvalid......

2018-04-16 11:54:01 760

原创 Bundle/Intent传递序列化参数暗藏杀机

Android进阶之路系列:http://blog.csdn.net/column/details/16488.html前几天一个朋友跟我说了一个诡异且恐怖的事情,有个人用了几行代码就让他们的app歇菜了。这勾起了我极大的兴趣,于是我亲自尝试了一下。代码非常简单,如下:Intent intent = new Intent();intent.setComponent(new ......

2018-04-03 10:11:35 4824 6

原创 探索startActivity流程及在Activity间是如何传递Intent的

Android进阶之路系列:http://blog.csdn.net/column/details/16488.html在activity中intent到底是怎么传递的,而且还可以跨进程甚至跨app来传递,下面我们从源码层面探索一下从startActivity开始,源码如下:@Overridepublic void startActivity(Intent intent) { this.st......

2018-03-06 16:24:02 6458

原创 一步一步自定义spinner

spinner就是下拉选择组件,系统自带的spinner使用起来非常方便,首先定义一个array(strings.xml),如下:<array name="grade"> <item>一年级</item> <item>二年级</item> <item>三年级</item>

2018-03-01 16:44:47 2924

原创 java中四种线程池及poolSize、corePoolSize、maximumPoolSize

Executors提供四种线程池:newCachedThreadPool :缓存线程池,如果线程池长度超过处理需要,可回收空闲线程,若无可回收,则新建线程。newFixedThreadPool : 定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool : 计划线程池,支持定时及周期性任务执行。newSingleThreadExecutor...

2018-01-04 10:31:11 40425 4

原创 自定义RecyclerView动画——实现remove飞出效果

我们经常会遇到在一个list中删除一条数据,这时候一般会有一个飞出的动画效果,如下图:在RecyclerView中可以通过setItemAnimator函数设置一个ItemAnimator,实现item的add、remove、change等动作的动效。下面我们就通过ItemAnimator来实现上面的效果。首先创建一个类,继承至SimpleItemAnimator,如下:class FlyAnim......

2018-01-03 11:16:59 7313 7

原创 自动规避代码陷阱——自定义Lint规则

一、Lint是什么?Lint 是一款静态代码分析工具,能检查安卓项目的源文件,从而查找潜在的程序错误以及优化提升的方案。当你忘记在Toast上调用show()时,Lint 就会提醒你。它也会确保你的ImageView中添加了contentDescription,以支持可用性。类似的例子还有成千上万个。诚然,Lint 能在诸多方面提供帮助,包括:正确性,安全,性能...

2017-12-25 17:40:29 3243 4

原创 Android中Intent/Bundle的通信原理及大小限制(Parcelable原理及与Serializable的区别)

我们知道可以通过Intent和bundle在activity或fragment间进行通信,那么这个通信是如何实现的。通过intent的bundle的源码可以看到它们都是实现了Parcelable,其实就是通过序列化来实现通信的。提到Parcelable就不得不提Serializa...

2017-12-20 16:19:15 7251 2

原创 多线程同步中sleep与wait区别

1、函数wait是Object的一个函数,指线程处于进入等待状态,此时线程不占用任何资源,不增加时间限制。wait可以被notify和notifyAll函数唤醒(这两个也是Object的函数)。sleep则是Thread的一个函数,指线程被调用时,占着CPU不工作.此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。所以sleep(100L)意思

2017-12-18 11:23:22 3535

原创 ScrollView内嵌ListView或GridView的滑动处理

开发过程中经常会遇到使用scrollview嵌套listview或gridview的情况,这时由于scrollview拦截消费了滑动事件,所以在listview或gridview区域滑动时该区域无法滑动,而是scrollview整体滑动。正确的处理应该是当焦点在listview或gridview区域该区域滑动,在区域外则scrollview滑动。想要解决这个问题,加上如下代码即可:

2017-12-15 17:31:40 397

原创 Animation插值器:解决Android Animation 循环执行的停顿问题

在Android开发中,有时候我们需要一个动画一直循环执行下去,常见的如laoding菊花一直旋转,这时候就需要使用Animation的repeat功能,如下:animation = new RotateAnimation(0f, 360f, lightView.getWidth() / 2, lightView.getHeight() / 2);animation.setDuration(

2017-12-01 17:28:46 6989

原创 详细分析Android中的引用机制Reference(WeakReference、SoftReference、PhantomReference)

1、前言在java中,我们知道一般情况下当一个对象被其他对象引用时,该对象则不会被回收。但是有时我们虽然需要使用该对象,但又希望不影响回收。比如在Activity中以内部类的方式创建了一个Handler,这个Handler就会隐式的持有一个activity的引用,当这个Handler被一个耗时线程所引用。这时如果关闭这个Activity,由于被引用该Activity及它所持有的引用占用的内...

2017-11-28 19:35:09 5409 2

原创 kotlin集合操作符——生产操作符

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html关于集合的操作符,直接引用书上的内容,基本上总结的很好了。merge把两个集合合并成一个新的,相同index的元素通过给定的函数进行合并成新的元素作为新的集合的一个元素,返回这个新的集合。新的集合的大小由最小的那个集合大小决定。val list

2017-09-22 17:53:48 1661

原创 kotlin集合操作符——元素操作符

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html关于集合的操作符,直接引用书上的内容,基本上总结的很好了。vallist= listOf(1,2,3,4,5,6)contains如果指定元素可以在集合中找到,则返回true。assertTru

2017-09-22 17:52:19 1626

原创 kotlin集合操作符——过滤操作符

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html关于集合的操作符,直接引用书上的内容,基本上总结的很好了。vallist= listOf(1,2,3,4,5,6)drop返回包含去掉前n个元素的所有元素的列表。assertEquals(lis

2017-09-22 17:47:11 6010

原创 kotlin集合操作符——总数操作符

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html关于集合的操作符,直接引用书上的内容,基本上总结的很好了。any如果至少有一个元素符合给出的判断条件,则返回true。val list = listOf(1, 2, 3, 4, 5, 6)assertTrue(list.any { it % 2

2017-09-22 17:43:34 1120

原创 Android魔术(第五弹)—— 一步步实现滑动折叠列表

这个效果是一年多前完成的,是模仿了当时喵街app的首页的效果,现在整理出来可能有些过时了,不过一些知识

2017-09-19 15:35:47 4202

原创 使用FastJson解析时有关内部类的两个问题

1、内部类层次结构不对假设有一个model类,代码如下:public class Model { public Data data; public class Data { public List rows; } public class Row{ }}注意虽然rows是Data的一个变量,

2017-09-18 15:43:14 8404 1

原创 自定义Toolbar的一些小技巧

1、改变Toolbar高度(解决图标不垂直居中)背景:实际使用中,toolbar默认高度有些大,会挤压内容。想将toolbar高度改小,将layout_height从wrap_content改为固定值。情况:toolbar的layout_height比默认高度小的时候,发现标题是居中的,但是两侧的图标不垂直居中而偏下了调查:网上有很多方法,基本都是无效的。甚至有人利用反射直接修改图标的

2017-09-15 15:40:18 576

原创 Android魔法(第四弹)—— 一步步实现百叶窗效果

本篇是基于AnimationListView框架的,这个框架在上一篇中详细的讲解了,建议阅读本篇前先熟悉一下。

2017-09-13 17:37:12 4156

原创 Android魔法(第三弹)—— 一步步实现对折页面

本篇文章主要去实现一个对折页面的效果,主要来学习Android中的截屏、Bitmap处理及canvas绘制这些知识。

2017-09-12 15:28:34 1443

原创 减小TabLayout高度而不影响每个tab展示的几种方法

在Support Design库中有一个新的组件TabLayout,配合TabItem实现tab页面的形式。但是图标和文字组合的tab的默认情况下,TabLayout中的tab太高,占据太多布局。但是如果直接将TabLayout高度改小,很容易出现图标显示不全的情况,因为图标和字体及两者的间距没有跟着改变。这时可以从几个方面处理:1、去掉指示线或改变其高度每个t...

2017-09-11 16:48:41 4970

原创 解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题

前提:当listview的item 中有textview,且textview中内容使用了spannablestring,并且需要点击事件(如超链接等),为textview设置了setMovementMethod。问题:这时发现listview的onItemclick无效了,且不是全部无效,而是其中有设置了setMovementMethod的textview的item的点击失效,

2017-09-08 18:01:17 4043

原创 Android魔法(第二弹)——一步步实现淹没、展开效果

本篇文章我们实现一个简单的动画效果,目的是熟悉和加深Android属性动画的使用。另外这次我们使用kotlin来进行开发,不熟悉kotlin的同学可以自行简单了解一下kotlin语法,基本应该能看懂。

2017-09-07 10:55:20 1485

原创 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)

之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败。为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了这篇文章。我们知道,Picasso加载本地图片有两种方法,一种是new File(path),另外一种是url = "file://" + path。尤其后一种在picasso2.5.2及

2017-09-06 14:59:13 1802 1

空空如也

空空如也

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

TA关注的人

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