自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中几种Map实现

Map是开发中经常用到的一种键-值对的存储结构,在java中有几种常用实现。HashMapHashMap允许值和value为null,线程不安全。创建的时候通常用默认的构造方法,还有其他的构造方法可以设置初始大小和负载因子,不设置的话默认初始大小是16,设置的话要求最小是2的4次幂16,最大是2的30次幂,如果设置的值不是2的N次幂,会往上取离它最近的2的N次幂,负载因子是0.75f,当容量大于容器大小x负载因子就会扩容。HashMap内部是通过Node<K,V>(也有可能.

2020-07-19 02:48:12 686

原创 Binder在Java层的实现

通过Binder在native的实现可以知道Binder通信的本质就是通过Binder共享内存进行跨进程通信,所以Java层还是利用这个进行通信的,只是Client和Server内部的一些执行逻辑有变化,我们直接来看Java层是如何与Binder通信的就可以了。Java系统服务的创建过程Java系统服务在Android启动过程中由ServiceThread启动,以power系统服务为例,PowerManagerService继承自Stub类,Stub是定义在IPowerManager接口..

2020-07-18 01:52:21 661

原创 Binder在Native的实现

android中的跨进程通信(ipc)用的是C/S体系系统,Binder为这个体系系统提供IPC通信能力。在android的C/S体系中增加了一个组件servicemanager,提供注册和检索Service的功能。Service在启动过程中将自身信息注册到servicemanager,servicemanager中维护了一个Service信息的列表,Client在使用服务时,可以通过名字像servermanager获取对应Service信息。servicemanager由init启动的进程,本身也是个

2020-07-16 01:26:33 351

原创 Java GC

垃圾回收器(Garbage Collection)虽然不是JVM最先使用的,但是因为工作原因,我看的都是JVM的GC。java中不需要开发者手动释放无用对象的内存空间,gc会自动完成这一项工作,了解gc只要了解这几件事就行:1. 哪些内存属于“垃圾”要被回收掉?2. 什么时候执行gc来回收垃圾?3. 怎样回收垃圾,释放内存?一 哪些内存属于垃圾gc是jvm自带的垃圾回收器,会自动帮助我们回收垃圾,我们要知道在jvm眼中哪些内存属于垃圾,垃圾既不在使用的内存,既然不再...

2020-07-06 02:21:39 112

原创 Java对象创建

创建一个Java只要使用new关键字就可以,但是在我们new一个对象的时候,虚拟机中经历的过程要比调用new关键字这一行代码复杂的多。 虚拟机遇到一个new指令时,先去常量池中检查这个类是否被加载解析和初始化,如果没有,则会先执行类加载过程。 当类加载检查通过后,虚拟机会为新生对象分配内存空间。新生对象所需的内存大小在类加载完成后便可完全确定,为对象分配空间的任务就是把一块确定大小的内存从java堆中划分出来。如果java堆的内存是规整的,已使用的内存放一...

2020-06-08 21:56:53 91 1

原创 JAVA内存区域(1.7及之前)

PS:最初只是简单的知道Java内存分为堆内存和栈内存,当时被告知堆内存存储的是对象,栈内存存储的是基本数据类型和指针,当时就想对象是在堆内存中,如果对象有个属性是基本数据类型,难道这个属性存在栈中吗?深入了解了一下java内存终于解了之前的疑惑。感想:随着手机的配置越来越高,内存越来越大,CPU核心数量和频率越来越高,目前的移动端开发也有了一些改变,RN,FLUTTER等跨平台技术越来越流行,还有Kotlin,他们的共同特点是提升开发效率,封装的接口易用,可能是我对他们了解的不多,并不知道他们该如何优

2020-06-06 01:07:03 166

原创 greenDao简单使用

在项目的build.gradle中添加compile 'de.greenrobot:greendao:2.1.0'下载DaoGenerator项目,打开DaoGenerator项目public static void main(String args[]) throws Exception { Schema schema = new Schema(1, "com

2016-04-05 16:00:46 2834

原创 基于ViewDragHelper的抽屉控件

现在android的抽屉控件很多,android官方也有,但是不符合我想要的样式,于是自己写了一个。我想要的结果是滑动的时候抽屉并不动,而是首页动,android官方的抽屉是首页不动,是将抽屉滑到首页上,qq的样式为首页滑动,漏出抽屉,但是抽屉也是跟随着首页的滑动而滑出来的。ViewDragHelper可以不接触ontouch而控制子view的移动,用来做抽屉也很简单很方便很强

2016-03-22 22:54:06 734

原创 Dagger2简单使用

在注入的时候需要Component,inject方法需要将被注入的对象传进来,一般都是activity,然后component就会把数据注入给传进来的对象。    例如Component是C,activity是A,A中有个对象需要被注入,对象为D,需要注入的对象要用@Inject注解,C注入对象需要Module,叫它M。M的类声明外要加@Module。    首先要初始化C,在C的

2016-03-15 15:13:42 412 2

原创 android 6.0权限问题

最新的android 6.0系统加入了权限控制,用户可以控制权限的开关,这样即使在manifest中申请权限了,但是用户依然可以关闭,所以在调用需要权限才能调用的api的时候,比如获取mac地址,一定要判断是否拥有权限,否则会崩溃.api23还提供了两个新的接口,checkSelfPermission()和requestPermissions().checkSelfPermission()

2015-12-24 16:57:52 890

原创 surfaceview缓存问题

之前在网上看到surfaceview有双缓存机制,但是实际用起来并不是绝对的双缓存,还在网上看到有说三缓存的,但是实际操作中发现这并不是绝对的.用surfaceview绘图的时候,先调用holder.lockCanvas()获得一个canvas,然后可以在这个canvas上继续画东西,然后调用holder.unlockCanvasAndPost(canvas)将这个canvas绘制到s

2015-12-22 11:11:20 2491

空空如也

空空如也

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

TA关注的人

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