自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

萨达哈鲁的博客

Android小菜鸟到大菜鸟的编程之路

原创 狼人杀语音法官助手

狼人杀语音法官助手 简介 为什么叫语音法官助手呢?因为他可以自己在黑夜里叫玩家睁眼闭眼,记录 游戏状态,这样当玩狼人少一个法官,或者大家都要玩的时候,有一个手机当法官,岂不是美滋滋? 版本 V 1.1.0 版本 增加重新选择人数以及角色功能,可以重新选择游戏人数,重新选择游戏...

2019-12-30 14:56:23 9439 0

原创 主流视频通话SDK比较

视频通话框架 主流的视频通讯框架比较多,此文主要通过Android平台的来做SDK平台使用的比较。 现在的视频热门框架有一些如: Jitsi  Jitsi是一个开源的,安全(ZRTP加密),高质量的SIP/XMPP视频通话、会议、聊天、桌面共享、文件传传输。可以安装在你喜欢的操作系...

2017-01-11 17:54:29 22397 12

原创 Android摄像头获取实时数据+Demo

首先需要用到的是一个叫Camera类的,更新的一个叫Camera2的类。 Camera2是从 SDK 5.0(API Level 21)开始才被引入的。里面的方法有些还是比原来的方便许多的,但是,用户系统版本参差不齐,所以暂时还是使用Camera来进行开发。 SufaceView...

2016-10-06 18:19:07 14823 2

原创 如何在Activity中获取调用者 -- getReferrer()

如何在Activity中获取调用者 – getReferrer() 前言 为什么要在Activity中获取调用者? 主要是安全和定制两个方面的需求吧。 安全需求: 一般Activity如果已经对外开放了(即exported为true,或者加了Intent-filter),那么对Activity...

2019-12-29 23:24:01 81 0

原创 Java线程Dump分析

Thread Dump介绍 什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的...

2019-10-30 08:47:49 266 0

原创 源码解析view的显示判断用isShown()还是View.VISIBLE

前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其实可以来看看源码 public boolean isShown () Added in API ...

2019-10-18 20:30:02 85 0

原创 编译出错 ninja: build stopped: subcommand failed Android

解决方法 错误:ninja: build stopped: subcommand failed. 办法一:按照提示:ulimit -c unlimited 该命令的详细解释参考:https://www.cnblogs.com/qq78292959/archive/2012/05/08/24904...

2019-10-16 08:40:26 1090 0

原创 Android 适配之FileProvider的使用

Android 7.0 文件权限的变化 为了提高私有文件的安全性,在targetSdk版本为N或者以后版本的app中,其私有目录将会限制访问。这可以防止私有文件元数据的泄露,比如文件大小或者是文件是否存在。但这给开发者带来了一些不利的影响: 文件的所有者不能放宽文件权限,如果你使用MODE_W...

2019-08-30 21:04:59 63 0

原创 使用Android Studio批量转换图片为Webp格式

简介 Webp是一个现代的图片格式提供优秀的无损和有损压缩。使用Webp我们可以创建更小更丰富的图片。 Webp无损图片比PNG图片的size小26%。Webp有损图片在同等SSIM(结构化相似)质量下比JPEG小25-34%。无损Webp支持透明度(透明通道)只占22%额外的字节。如果可以接受有...

2019-08-30 20:32:59 609 0

原创 AtomicInteger类的理解与使用

前言 JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理. Atom...

2018-09-05 19:23:06 123 0

原创 HTTP缓存控制小结

前言 通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本。因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。 与缓存相关的HTTP首部字段 我们先来瞅一眼RFC261...

2018-09-04 20:34:23 521 0

原创 Android开发之全局异常捕获

前言 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大...

2018-09-04 19:43:02 2966 0

原创 Android内存优化--使用SparseArray和ArrayMap代替HashMap

前言 在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的a...

2018-09-04 19:25:14 160 0

原创 Java 类加载机制

前言 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而...

2018-08-29 19:41:39 134 0

原创 Java 内存模型及GC原理

前言 一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及如何优化GC的性能、与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能。 本文将从JVM内存模型、GC工作原理,以及GC的几个关键问题进...

2018-08-29 13:00:38 129 0

原创 什么是死锁及死锁的必要条件和解决方法

前言 在计算机系统中有很多一次只能由一个进程使用的资源,如打印机,磁带机,一个文件的I节点等。在多道程序设计环境中,若干进程往往要共享这类资源,而且一个进程所需要的资源不止一个。这样,就会出现若干进程竞争有限资源,又推进顺序不当,从而构成无限期循环等待的局面。这种状态就是死锁。系统发生死锁现象不...

2018-08-26 20:59:34 166 0

原创 Java 多线程加锁的方式总结及对比

前言 Java多线程可以通过: synchronized关键字 Java.util.concurrent包中的lock接口和ReentrantLock实现类 这两种方式实现加锁。 Lock 和 synchronized synchronized关键字加锁的缺陷 如果一个...

2018-08-25 10:14:41 140 0

原创 LruCache 源码解析

简介 LRU 是 Least Recently Used 最近最少使用算法。 曾经,在各大缓存图片的框架没流行的时候。有一种很常用的内存缓存技术:SoftReference 和 WeakReference(软引用和弱引用)。但是走到了 Android 2.3(Level 9)时代...

2018-08-15 08:31:36 109 0

原创 Android高效加载大图、多图解决方案,有效避免程序OOM

高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应...

2018-08-15 07:54:47 166 0

原创 Android应用层View绘制流程与源码分析

前言 Activity中界面加载显示的基本流程原理,最终分析结果就是下面的关系: 看见没有,如上图中id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归的实现。 Android中的任何一个布局、任何一个控件其实都是直接或间接继承自View实...

2018-08-12 20:36:07 132 0

原创 Retrofit2.0 源码分析

前言 注解式的框架非常火,注解以其轻量,简洁等特性被人们所喜爱者,关键是它解藕。网络请求的框架非常多,比较受欢迎的当属retrofit和okHttp了。连retrofit都是基于okHttp之上开发的。ok, 言归正传,我们来聊聊retrofit。如果对okhttp有疑问的可以阅读我的这篇文...

2018-08-10 08:35:40 190 0

原创 详解Java中的clone方法 -- 深拷贝和浅拷贝

Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢? 使用new操作符创建一个对象 使用clone...

2018-08-08 08:21:35 383 2

转载 Android 9 Pie 现已面向全球正式发布!

前言 经历一年多的开发和数月以来早期用户的反复测试,最新 Android 平台 —— Android 9 Pie 终于正式面向全球发布! Android 9 利用人工智能技术,让您的手机更加智能、简洁与人性化。请通过本文了解 Android 9 的所有新特性,同时也希望各位开发者能够借助 ...

2018-08-08 08:08:29 1317 0

原创 okhttp3 源码详细解析

前言 OkHttp是一个非常优秀的网络请求框架。目前比较流行的Retrofit也是默认使用OkHttp的。所以OkHttp的源码是一个不容错过的学习资源。 基本使用 从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.源码地址 OkHttpClient client...

2018-08-04 22:34:23 716 0

原创 LeakCanary 原理浅析

前言 提到Java语言的特点,无论是教科书还是程序员一般都会罗列出面向对象、可移植性及安全等特点。但如果你是一位刚从C/C++转到Java的程序员,对Java语言的特性除了面向对象之外,最外直接的应当是在Java虚拟机(JVM)在内存管理方面给我们变成带来的便利。JVM的这一大特性使Java程序...

2018-08-04 09:59:59 2400 0

原创 Java中守护线程的总结

前言 在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守...

2018-08-04 08:56:53 221 0

原创 Java线程池详解

前言 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一...

2018-08-03 08:51:45 160 0

原创 ThreadLocal详解分析

前言 要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的? ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与...

2018-08-02 08:38:15 185 3

原创 Android布局优化之标签include,viewstub,merge

前言 布局优化对于每个项目总是必不可少,本文主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面可调优点,顺带提及布局调优相关工具(hierarchy viewer和lint)。 抽象...

2018-08-01 08:59:35 372 0

原创 Android ListView与RecyclerView对比浅析

前言 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大和灵活。 弄清楚RecyclerView是否有足够的吸引力替换掉ListView,我从性能这一角度出发,研究RecyclerView和ListView二者的缓存机制,并得到了一...

2018-08-01 08:31:27 1866 0

原创 Android应用程序的启动过程

前言 在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。 ...

2018-07-29 22:44:52 286 0

原创 HashMap工作原理

前言 几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别 ,那么为何这个问题如此特殊呢?是因为这个问题的深度很深。ConcurrentHashMap和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的旅程吧! ...

2018-07-29 15:02:47 183 0

原创 JAVA / Android 设计模式之适配器(Adapter)模式

简介 定义 适配器模式,即定义一个包装类,用于包装不兼容接口的对象 包装类 = 适配器Adapter; 被包装对象 = 适配者Adaptee = 被适配的类 主要作用 把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。 适配...

2018-07-23 20:18:40 192 0

原创 JAVA / Android 设计模式之建造者(Builder)模式

前言 在使用一些热门第三方框架的时候,我们往往会发现,比如okHttp的client,初始化retrofit 对象,初始化 glide 对象等等,都用了这样: Retrofit.Builder() .baseUrl(baseUrl) .client(getClient()) .addCon...

2018-07-12 20:40:06 253 0

原创 git 出现 error Missing tree 的处理办法

问题 公司搭建了 gerrit 代码审核服务器.有较低的概率(目前团队中出现过两例),在 git push 提交时,出现如下错误: git push --receive-pack='git receive-pack --reviewer xxx@xxx.cn --reviewer...

2018-07-09 19:36:41 871 0

原创 Android开发@IntDef完美替代Enum (枚举)

概要 Enum 是 java 中一种包含固定常数的类型,当我们需要预先定义一些值时,我们使用 Enum,这样做通常为了在编译时期避免接受额外常量引起的错误。 而且,Enum 增加了APK 的大小,比常量多5到10倍的内存占用,这是关于应用性能的最佳实践. 使用 Enum 的缺点 每一个枚举...

2018-06-14 13:25:02 984 0

原创 JAVA / Android 设计模式之策略模式

前言 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 背景 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选...

2018-06-13 12:46:02 292 0

原创 在 Android Studio 上实时调试数据库( SQLite )

SQLScout 安装 SQLScout 是一个 Android Studio 的插件,通过点击: Setting —> Plugings —> Browse Repositories 搜索 SQLScout 安装即可。 要是下载不动,...

2018-06-11 19:33:31 2298 0

原创 JAVA设计模式之单例模式

概念 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点:  单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。   单例模式确保某个类只有一个实例...

2018-05-21 21:10:10 275 0

原创 Android Studio 插件推荐

简述 现在用AndroidStudio的越来越多了,工具当然也是必不可少的,这里收集了平时觉得不错的插件共享给大家。 安装说明 给出的插件,可直接根据名字,在AndroidStudio - File - Setting - Plugins - Browse Respositories中搜...

2018-05-13 18:05:01 2417 0

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