自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 换肤效果实现

apk换肤在有些app上实现的还不错,比如QQ,网易云等;那怎么去实现一个无闪烁,无启动的换肤呢?接下来从代码角度一步一步去实现app的换肤功能要想实现真正换肤的话,首先要面临两个问题;首先是怎么知道哪些控件是需要换肤的?然后换肤的资源包是怎么从外部加载进来的?拦截系统创建收集需要换肤的View如上图所示,首先我们要做的是拦截系统实例化View的过程,自己创建View,收集需要换肤的View;那怎么去拦截呢?我们知道android 的页面大部分是通过布局文件xml来编写的,那系统是怎么解析这个.

2020-08-31 15:47:52 426

原创 Activity启动模式探究

文章目录tasksstandard模式从Launcher启动的情况startActivity的情况singleTop模式singleTasksingleInstanceIntent Flag介绍Task创建确定了Task之后对它的操作启动的标志设置启动的过程设置返回的地方返回后的状态说到启动模式想必大家都很熟悉;standard, singleTop, singleTask, singleInstance;要是说这几个有什么区别或者特点的话,估计有很多人也能说上来;但是,如果与taskAffinity和

2020-08-09 21:31:03 298

原创 ViewPager和Fragment懒加载

相信很多人都做过过viewPager与多个fragment滑动的app, 这种场景很多,但是由于ViewPager的缓存机制,最少需要多加载一个fragment,所以这就造成如果加载的页面数据请求比较大,这就造成了页面启动会比较慢;因此,我们只需要在页面可见的时候去加载数据就行了,那怎么才能做到在页面可见的时候加载呢?下面我们会一步一步实现Fragment是怎么实现懒加载的首先,我们实现懒加载的目的就是在页面可见的时候去加载数据,当然这还要处理第一次可见还是下次可见,因为一般情况下第一次可见的话就从.

2020-08-08 18:29:47 341

原创 从源码角度理解handler通信机制

handler 我们都知道,是android多线程的一种通信机制,很多人也知道怎么用它,并且也大致知道它的工作流程,但是如果有人问到子线程是怎么将消息发到主线程的?,消息循环会不会耗资源?为什么线程间的通信不会干扰?怎么保证每个线程的Looper与MessageQueue是唯一的接下来我会从源码的角度来回答上面的问题消息发送public class MainActivity extends AppCompatActivity { @SuppressLint("HandlerLeak") .

2020-08-07 00:10:04 154

原创 WebView跨进程通信框架源码分析

我们都知道webView是加载解析网页代码用的,但是如果webView加载的网页数据过大的话就会消耗本进程的内存空间,从而影响app的性能;因为,系统给每个app的进程分配的空间是有限的,过多的使用空间会造成进程空间资源不足;因此,遇到这种情况我们最好给webView开一个独立进程,这样的话app主进程就节省了加载webView资源的空间webView与native通信我们知道webView 在与本地代码互相调用的时候...

2020-08-05 01:30:14 605

原创 ReicyclerView实现探探卡片滑动的效果

我们知道RecyclerView 有很多显示的样式可供选择,比如列表的,网格的,瀑布流式的显示样式,这主要取决于RecyclerView.LayoutManager这个类,想前面说的网格的,列表的这些都是继承自这个类实现的,不过这些样式,比如:GridLayoutManager, LinearLayoutManager等这些系统已经帮我们做好了,所以要想实现类似探探的那种效果的话,我们还的想系统这样去继承RecyclerView.LayoutManager来对列表里面的子控件进行布局,显示成我们想要的样子.

2020-07-21 22:10:15 400

原创 RecyclerView复用与回收源码分析

我们知道RecyclerView 在滑动到一定数量之后回进行视图复用,那RecyclerView 是如何做到复用和回收的呢?首先我们在分析源码的时候得清楚我们要以什么目的去分析源码,像RecyclerView 复用的话,既然它是在滑动的时候复用的呢,那我们猜想它是不是就是在走滑动事件的时候去做的复用呢?带着这个疑问我们找到RecyclerView 源码里面从生面的描述中,首先我们需要找到滑动事件然后继续找复用与回收的方法寻找回收与复用的方法首先从RecyclerView源码中找到滑动事件的地方:.

2020-07-20 23:47:45 141

原创 屏幕适配的一种解决方案

android屏幕适配屏幕适配的一种解决方案方法说明实现代码效果图屏幕适配的一种解决方案众所周知,安卓屏幕适配一直以来是一个头疼闹热的问题,市面上的解决方案也层出不群,比如:google的百分比适配,还有像素目录适配等,这里要说的是另外的一种方式,而且这种方式几乎能够适配所有的屏幕方法说明其实很简单,大致需要两个步骤:根据ui切图的尺寸与当前屏幕的尺寸计算出尺寸比例继承需要适配的控件...

2020-04-11 15:34:14 431

原创 手写apk加固

手写apk加固加壳解压原apk并加密重命名dex文件对壳文件操作打包压缩成apk文件签名脱壳运行解压原apk, 解密原dex文件加载原dex文件demo下载apk加固的目的其实就是对app的核心代码做防护工作,避免被其他人反编译;废话不多说了,直接开始!加壳首先,要想对apk加固的话,需要以下几个步骤:解压原apk对原apk里面的classes.dex 进行AES加密重命名cl...

2020-04-05 22:31:24 503

原创 kotlin中的lambda表达式

kotlin中的lambda表达式lambda即lambda表达式,简称lambda。本质上是可以传递给其它函数的一小段代码。有了lambda,可以轻松地把通用代码结构抽取成库函数。lambda最常见的用途是和集合一起配合。kotlin甚至还拥有带接收者的lambda,这是一种特殊的lambda;从某种意义上说的话kotlin中的lambda其实就是匿名函数。首先看一下kotlin中的匿名函...

2019-06-02 12:21:25 389

原创 kotlin的空值判断

kotlin的空值判断本门是学习kotlin的时候,个人觉得所要注意到的知识点,在这里记录一下,方便以后查阅判空返回的情况在些java 代码的时候如果遇到对象为空的时候,通常会这样去做处理:public void showMsg(String msg){ if(msg == null){ return ; }}但是这样些太麻烦了,下面是kotlin的写法fun sho...

2019-06-02 00:30:57 3749

原创 用cmake编译并使用c++基准测试库-celero

celero是c++用来测试程序性能与运行效率的一个测试库, 通过celero可以方便的测试我们程序的性能下载并编译celero下载celero下载地址:https://github.com/DigitalInBlue/Celerocmake下载地址:https://cmake.org/download/关于celero与cmake的使用这里就不一一赘述了,大家可以看下相关文章.编译c...

2019-05-16 15:46:09 787

原创 用ndk实现android的图片压缩

最近在看了动脑学院的图片优化之后,感觉通过ndk来实现的压缩,压缩比例还是很好的我们知道android的图片显示离不开bitmap,而在android开发中避免不了对图片的压缩处理,当然bitmap有自带的压缩方法,调用bitmap的compress方法就可以实现简单的压缩,但是这种压缩出来的图片从清晰度上来说,效果不是很好,原因在于这种压缩的底层处理是由google的skia图片处理引擎来...

2019-04-18 15:39:02 762 1

原创 自定义同步锁的实现

自定义同步锁的实现本文出自《java 并发编程的艺术》在多线程访问资源的时候分为独占式与共享式,本例子是一个基于AbstractQueuedSynchronizer的自定义同步锁;关于AbstractQueuedSynchronizer的实现原理,其实就是内部维护了一个双向队列,在本例子中,如果线程未获取到锁的时候会发生自旋。一下是自定义同步锁的实现:package com.kang...

2019-04-18 10:33:24 382

原创 一个简单线程池的实现

本文中的代码出自《java并发编程的艺术》在这里引用,纯属记录一下自己学习到的东西一个简单线程池的实现说到线程池,大家都不会陌生,线程池主要用在多任务,高并发的程序当中,其中的作用显而易见,线程池避免了过多的创建线程对象,从而减少了系统资源的浪费;而且线程创建过多的话,上下文切换也会频繁;下面先看一下线程池接口的定义:package com.kangxin.doctor.threadp...

2019-04-13 20:09:06 225

原创 一个简单的数据库连接池

一个简单的数据库连接池创建连接池连接驱动连接池测试亮点介绍这些阵子正在看《java并发编程的艺术》这本书,感觉还不错,看到多线程等待超时唤醒的时候,看到了这个例子,里面涉及到了几个亮点的技术,在这里记录一下创建连接池package com.kangxin.doctor.connectdemo;import java.sql.Connection;import java.util.L...

2019-04-12 22:49:12 203

转载 完美的 Ubuntu16.04 优化方案

转载于:https://adymilk.cn/2017/08/04/2017-08-04-Install-Beautiful-Ubuntu/完美的 Ubuntu16.04 优化方案2017-08-04系统2580美化后的 Ubuntu 桌面截图Ubuntu 到底怎么样?来,听听人家官网的妹子是怎样介绍的。Ubuntu | 最受欢迎的免费操作系

2017-12-08 15:54:44 3678 1

转载 GitHub上排名前100的Android开源库

转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 An

2017-12-08 15:48:17 1258

转载 从android源码中生成系统签名文件

1、编译android源码。2、cd build/target/product/security/ 3、执行 openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem生成platform.pem文件4、执行 openssl pkcs12 -export -in platform.x509.pem -o

2017-11-30 15:49:44 1172

转载 用ffmpeg 把mp4文件转为ts文件并生成m3u8列表

在使用hls技术播放视频流时,首先要把视频转换为ts片和一个m3u8播放列表,使用ffmpeg进行该转换时(低版本ffmpeg不支持直接转,只能现在转换成ts,再用m3u8-segmenter切片,笔者使用的是ffmpeg version-2.1.2),通常使用如下命令:ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls

2017-11-30 15:47:36 791

转载 移动硬盘在windows上用了之后在linux上不能访问

文章转载于:http://blog.csdn.net/u010426270/article/details/52420231我的电脑是在win10下装的ubuntu16.04双系统,今天进入ubuntu系统访问win10磁盘,出现如下错误:、可能原因:上一次使用win10后使电脑睡眠,没有完全关机,这次开机直接进入ubuntu系统,访问win10磁盘报错。解

2017-11-22 11:44:54 3369

转载 Android 监听 ScrollView 滑动到最底部

Android 监听 ScrollView 滑动到最底部 转载自: https://www.cnblogs.com/carmanloneliness/p/4355158.html做产品时,有一个需求,需要监听ScrollView滑动到最底部。在网上找了些方法,都有这样或那样的问题,要不就是监听不精确, 要不就是重复监听,那些代码没有产品化,很不可靠。 经过自己试验,终于找到了个能够精确监听

2017-11-20 09:54:17 721

原创 机顶盒项目--遥控器组合键的实现

一般在机顶盒的开发中,难免会出组合键的情况,那怎么实现呢:首先写一个组合键接受的监听类:public class BackDoorDetector { public BackDoorDetector(int []keys, BackDoorKeysListener listener) { this(keys,listener,2000); } publi

2017-02-23 15:32:03 1403

原创 android studio根据配置打不同功能的apk

今天在做项目的时候,经理要求在项目编译的时候根据build的配置来执行不同的代码,从而打出不同功能的apk,这个我觉得要写脚本,索性经理给了我一段配置代码解决了这个问题: 在app下面的build.gradle里面添加如下代码: productFlavors { anyone { } wine { } }

2017-02-23 15:17:44 1026

转载 android 文件下载引擎

给大家分享一个文件下载引擎 个人觉得还是挺牛的!

2017-01-19 11:56:57 460

原创 android 64k方法数限制的解决方案

问题描述Android 应用开发中,当应用的模块增加到一定规模后,apk不可避免的会出现64k方法数问题。 64k方法数问题的直观表现是在构建APP的时候会先编译错误,导致构建失败:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536解决方案网上有很多解

2017-01-12 17:26:21 474

原创 android butterknife注解绑定后发生nullexception

问题今天想用一下butterknife这个库,可是当我在gradle的dependencies里面加入这个compile 'com.jakewharton:butterknife:8.4.0'然后在activity里面这样做了一下:public class MainActivity extends AppCompatActivity { @BindView(R.id.name_txt)

2017-01-12 14:48:46 502

原创 小白马卫士之手机杀毒

手机杀毒的话,其实就是通过PackageManager的管理者获得手机上面所有安装好的程序,然后在病毒库里面检测与当前程序是否与病毒库里面的程序匹配,如果匹配的话,那就有病毒,然后将其删除就行了!在这之前需要一个DAO来进行检查是否有病毒

2014-12-15 20:30:06 1238

原创 小白马卫士之流量统计

然后就是加载界面程序的代码了,小白马觉得这里的话与程序管理模块差不多所以多余的话就不在赘述了就直接上代码了

2014-12-06 21:13:11 1074

原创 小白马手机卫士之进程管理

进程管理的话,也是比较简单的,首先是写一个获取手机正在运行的进程的类,此类中会有区分那个是用户进程哪个是系统进程的方法

2014-12-06 20:37:52 761

原创 小白马卫士项目总结之程序管理

程序管理这个模块的话说起来也挺简单的,其实就是通过PackageManager这个类获取包的管理者对象然后再得到手机上所有程序的有关信息,包括程序的包名,名字,版本,图标等等!然后把它放在list集合中,然后通过适配器把它放在listView里面就可以了!恩~~ 首先就是写一个程序信息的提供类,在这个类里面有得到应有程序的方法,还有判断出那个是用户程序

2014-12-06 19:27:14 779

原创 小白马卫士项目总结之通讯卫士

在我们对号码进行设置的时候,它其实是把号码保存到android的数据库中的!当我们再次进入的时候它是从数据库里面取数据的;在创建数据库的时候我们需要继承SQLiteOpenHelper这个类:

2014-12-05 20:45:00 945

原创 小白马卫士项目总结之防盗功能的实现

此功能的实现原理是这样的,在点击sim卡时,程序会获取本机手机卡的卡串号,然后把它存储起来,然后当你的手机丢了的时候,你会通过手机上的安全号码发短信给你的手机,然后程序会再一次或许本机上的卡串号,如果与之前的卡串号不一致的话,那就给这个安全号码发送短信,提示卡换了!当然这个得话,你得用广播进行接收安全号码发过来的短信!而且这个广播的类型是系统自启动就开了,而且通过广播还得重启一个服务,如果手机丢的话,你可以发送短信,让这个服务帮你擦除数据!

2014-12-04 22:34:17 854

原创 小白马卫士项目总结之手机防盗

如果想要远程锁屏的话,可以点击激活后可以远程锁屏这个,然后激活一下就可以了!设置完成后就进入到主界面了!其中主要的实现代码是这样的,上面也有详细的注释,值得说明的是,密码的保存我是通过SharedPreferences来完成的,当第二次进入的时候,它通过存放的boolean类型的状态判断一下是不是第一次设置,如果是第一次设置的话,就进行设置密码,如果不是第一次设置的话就进行输入你设置的密码!

2014-12-04 21:44:55 863

原创 小白马卫士项目总结之版本更新

实现原理:通过向服务器端发送请求,获取服务端的版本信息,然后再与本机上的软件进行比对,如果版本不一致的话,那就得更新版本!首先需要一个打开的欢迎界面:

2014-12-04 09:02:23 1293

屏幕保护程序

这是我用delphi写的屏幕保护程序! 上面还带有验证密码!

2014-10-10

空空如也

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

TA关注的人

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