自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AES加密加固

一、反编译1.定义:利用编译程序从源语言编写的源程序产生目标程序的过程。2.怎么进行反编译?先了解apk对文件构造二、加固方案的手段1.反模拟器:模拟器运行apk,可以用模拟器监控到apk的各种行为,所以在实际的加固apk运行中,一旦发现模拟器在运行该APK, 就停止核心代码的运行。2.代码虚拟化:代码虚拟化在桌面平台应用保护中已经是非常的常见了,主要的思路是自建一个虚拟执行引擎,然后把原生的可执 行代码转换成自定义的指令进行虚拟执行。3.加密:样本的部分可执行代码是以压缩或

2020-06-07 18:05:31 419

原创 Java并发基础知识(五)

线程池为什么要用线程池? Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服..

2020-05-17 17:25:00 432

原创 Java并发基础知识(四)

阻塞队列阻塞队列队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。什么是阻塞队列 .

2020-05-17 16:36:34 231

原创 Java并发基础知识(三)

CAS基本原理什么是原子操作?如何实现原子操作?假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁,这里会有些问题:首先,如果被

2020-05-16 16:48:09 208

原创 Java并发基础知识(二)

ThreadLocal辨析与Synchonized的比较ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间访问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。ThreadLocal的使用ThreadLocal类接口很简单,只有4个方法,

2020-05-16 14:19:54 202

原创 Java并发基础知识(一)

一、Java里的程序天生就是多线程的,那么有几种新启线程的方式?正确的答案应该是2种:1、类Thread;2、接口Runnable,有些人觉得应该是3个,还有一个是Callable接口,其实这个和Runnable是重复的,我们看源码分析首先源码中明确说明创建Thread只有2种方式;其次,Thread的构造方法中不接受任何的Callable参数我们继续看Callable,再使用的过程中,把它包装成FutureTask,而FutureTask是实现了RunnableFuture接口,R

2020-05-13 22:24:52 218

原创 Android事件分发机制

什么是事件分发用户通过屏幕与手机交互的时候,每一次点击、长按、移动等都是一个事件。 事件分发机制:某一个事件从屏幕传递到各个View,由View来使用这一事件(消费事件)或者忽略这一事件(不消费事件),这整个过程的控制。事件分发的对象是谁系统把事件封装为MotionEvent对象,事件分发的过程就是MotionEvent分发的过程。事件类型按下(ACTION_DOWN) 移动(...

2019-11-04 16:02:59 185

原创 Drawable系列之-BitmapDrawable

这几乎是最简单的Drawable了,它表示的就是一张图片。在实际开发中,我吗可以直接引用原始图片即可,但是也可以通过XML的方式来描述它,通过XML来描述的BitmapDrawable可以设置更多的效果,如下所示:下面是它的各个属性的含义。android:src这个很简单,就是图片的资源id。android:antialias是否开启图片抗锯齿功能。开启会让图片变得平滑,同...

2019-11-03 16:54:23 374

原创 Drawable系列之-Drawable简介

Drawable有很多种,它们都表示一种图像的概念,但是它们又不全是图片,通过颜色也可以构造出各式各样的效果。在实际开发中,Drawable常被用来作为View的背景使用。Drawable一般都是通过XML来定义的,当然我们也可以通过代码来创建具体的Drawable对象。在Android的设计中,Drawable是一个抽象类,它是所有Drawable对象的基类,每个具体的Drawable都有它的子...

2019-11-03 16:34:03 862

原创 Android Glide4.10.0引发的血案

今天下载最新的android studio3.5.1,导入了一个老项目,项目中的glide版本为4.8.0,可正常使用。后来把glide版本升级为4.10.0,也是可以运行的,但在项目里面有一个功能用到glide加载图片,竟然崩溃了,以下为报错日志找不到方法centerCrop(), 咨询看了代码才发现,这个功能是导入的一个第三方sdk实现的,sdk里面的glide版本为4.8.0,和...

2019-11-01 11:28:47 4459 1

原创 HashMap实现原理

一、Java中的hashCode和equals1、关于hashCodehashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的 如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同 如果对象的equals方法被重写,那么对象的...

2019-03-08 17:32:26 183

原创 自定义LabelView热门标签

现在各大主流app都有搜索功能,提到搜索不得不提热门标签,热门标签样式基本一致,今天带大家实现一个自定义的热门标签view.先上效果图:自动判断当前行是否可显示完整,如果不完整自动换行显示。1.创建LabelView继承ViewGroup2.复写三个构造方法public LabelView(Context context) { this(context, null...

2018-12-27 21:02:12 338

原创 requestDisallowInterceptTouchEvent处理滑动冲突,判断recycler是否滑动到底部

1.处理滑动冲突getParent().requestDisallowInterceptTouchEvent(true);表示不允许父控件接收事件,子View自己处理。getParent().requestDisallowInterceptTouchEvent(false);表示允许父控件接收事件,父View处理事件。实例代码:当用户按下或者移动的时候,我们告诉父组件,不要拦截我的事件...

2018-12-20 16:00:49 673

原创 Broadcast Receiver

1.广播定义在android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。2.广播的使用场景A.同一个app具有多个进程的不同组件之间的消息通信B.不同app之间的组件之间的消息通信3.广播种类1).Normal Broadcast:Context.sendBroadcast ...

2018-06-27 16:02:51 233

原创 Service介绍

Service(服务):是一种可以在后台执行长时间运行操作而没有用户界面的应用组件。一经启动会长时间在后台运行,即使启动它的Activity或者Broadcast被销毁了也不会受影响。注意:Service和Broadcast一样,运行在主线程中,不能做长时间的耗时操作。Service和Thread的区别:1.Thread是程序执行的最小单元,可以执行异步操作,相对独立。Service是运行在主线程...

2018-06-26 18:42:22 681

原创 Fragment详解

Fragment优点:1.使用频率较高,有自己的生命周期,可以更加灵活的加入到Activity中2.Fragment比Activity更节省内存,UI切换效果更加舒适3.Fragment需要依赖Activity,可以加载到Activity中Fragment加载到Activity中的两种方法:1.静态加载:添加Fragment到Activity的布局文件当中2.动态加载:动态在Activity中添加...

2018-06-22 18:00:58 565

原创 Uri使用场景

1,调web浏览器  Uri myBlogUri = Uri.parse(" http://xxxxx.com ");  returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);  2,地图  Uri mapUri = Uri.parse("geo:38.899533,-77.036476");  returnIt = new Intent(Int...

2018-05-05 08:23:33 138

原创 Activity的生命周期

返回栈:        Android是通过任务管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack)。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个活动,处于栈顶的活动会出栈,这时前一个入栈的活动就会处于栈顶位置。系统总是会显示处于栈...

2018-04-20 14:52:52 204

原创 Java基础知识大全

一、java面向对象的三大特性与含义继承:从已有的类得到继承信息创建新类的过程,继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序的可变因素的重要手段。封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已经定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自制、封闭的对象。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供简单的编程接口;多态:允许不同子类型的...

2018-04-17 20:01:06 162

原创 屏幕适配全攻略

一、概念1.屏幕尺寸:指屏幕的对角线的长度,单位英寸,1英寸=2.54厘米。2.屏幕分辨率:指在横纵向上的像素点数。单位px,1px = 1像素点,一般以纵向像素*横向像素,如1920*1080。3.屏幕像素密度:指每英寸上的像素点数,单位dpi,与屏幕尺寸和屏幕分辨率有关。4.px:构成图像的最小单位。5.dp,dip:密度无关像素,以160dp为基准,1dip = 1px。6.sp:可以根据文...

2018-04-01 10:00:13 168

原创 Android Studio升级到3.0.1遇到Annotation processors must be explicitly declared now. The following depend

Android studio升级到3.0.1报错Annotation processors must be explicitly declared now.  The following dependencies on the compile classpath are found to contain annotation processor.  Please add them to the a...

2018-03-29 11:57:59 466

原创 Android面试解密-自定义View

一、为什么要自定义控件:1.特定的显示分格2.处理特有的用户交互3.优化我们的布局4.封装等二、如何自定义View1.自定义属性的声明与获取2.测量onMeasure3.布局onLayout(ViewGroup)4.绘制onDraw5.onTouchEvent6.onInterceptTonchEvent(ViewGroup)自定义的声明与获取1.分析需要的自定义属性2.在res/values/a...

2018-03-28 21:11:08 1760

原创 开发环境搭建-Mac平台

HomebrewHomebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件。/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可...

2018-03-25 09:37:22 733 1

原创 初识React Native

          开发Android一年多时间,一直都是原生开发,今天看了处于技术前沿的React Native的介绍,忍不住感到它的强大,我准备把学习React Native过程记录于此,希望可以帮助其他新手快速入门,谢谢大家支持!React Native优点:1.跨平台,既可以开发Android,也可以开发IOS;2.低投入高回报,一次学习就可以同时开发Android和IOS;3.性能高,自...

2018-03-25 09:28:49 165

原创 华为、魅族手机无法打印 Log(Log.d() 和 Log.v() )

已经有一段时间没有写博客了,一直忙于学习,工作,希望可以在短时间内多提升自己,这篇文章是我在开发项目中遇到的,很多时间我们在调用服务器接口想打印服务器地址时,却发现Log日志不管用,我用的是魅族手机,之前一直没有注意这个问题,现在把解决办法分享给大家。原来国内的部分厂商定制的手机对于应用中的 Log 日志默认做了打印限制,需要手动设置才能打印出特殊级别的日志。目前发现有魅族和华为手机存在这样的问题...

2017-09-18 21:33:43 1402

原创 日期时间总结大全

今天做项目,碰到日期,时间相互转换及获取时间间隔的天数,做了一个总结:1.Calendar 转化 String  //获取当前时间的具体情况,如年,月,日,week,date,分,秒等         Calendar calendat = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat(

2017-01-21 16:32:26 391

原创 我的Android之旅

各位博友,大家好,转眼2016年已过,我们迎来全新的2017年,所谓新年新气象,首先祝愿各位新年快乐!这是我写的第一篇博客,为自己的2017年开个好兆头,到现在为止,我学习android一年不到,从开始的一窍不通到现在,走过很多坎坷路,编程的路痛并快乐着,相信大家和我有一样的感受! 近年来,手机移动平台越来越火爆。目前,手机平台如日中天的要数是iOS和Android了,尤其是iOS,S

2017-01-02 09:27:51 266

空空如也

空空如也

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

TA关注的人

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