自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Glide解析-概述

说起Glide,安卓开发应该都知道,这是一个比较屌的图片加载库,到底它屌在哪里呢?图片加载根据生命周期控制,多级缓存,多类型图片加载,网络请求库自由切换,内存消耗较小,这些都是它的优点,那就先来聊聊它的整体框架是怎么样的。本文以及Glide系列的其他文章都是基于Glide3.7.0版本的,在我去学习Glide的时候,这个版本是最新最稳定的版本,但是现在github上面已经有4.0的迹象了,应该马上就

2017-03-16 18:39:20 627

原创 多线程面试重点

一.线程状态1.start..2.stop..3.wait..4.notify/notifyAll..5.sleep..6.interrupt..7.join..8.yield..面试题:1.sleep是否会释放锁2.wait是否会释放锁,wait是否必须要要在synchronized的代码块中3.notify是否会释放锁,何时释放锁4.wait与notifyAll搭配使用的规范是什么?5.stop执行是否安全,要如

2020-11-02 15:31:30 217

原创 LinearLayout布局中的一些问题

LinearLayout中两个场景的分析:LinearLayout都布局在根布局中,且根布局width为match_parent,LinearLayout 中orientation = vertical,layout_width = wrap_content1.LinearLayout它有一个子view,子viewlayout_width = match_parent问题:LinearLayout和子view分别显示的宽度是多大?<LinearLayout androi..

2020-05-27 14:11:01 592

转载 Http 1.x弊端与Http 2.0比较

本博客转载自https://www.cnblogs.com/barrywxx/p/8570006.htmlHTTP2.0作为新版协议,改动细节必然很多,不过对应用开发者和服务提供商来说,影响较大的就几点。新的二进制格式(Binary Format)http1.x诞生的时候是明文协议,其格式由三部分组成:start line(request line或者status line),head...

2020-03-05 14:11:04 1346 1

原创 Android使用ndk toolchain交叉编译gloox

在上一篇https://blog.csdn.net/u011803341/article/details/99586726中使用了Android.mk进行编译,有可能会出现奇奇怪怪的问题,比如在str::string s = ""最基础的赋值都会报异常。想着还是编译的时候出了什么问题,所以最后采用了gloox自带的configure并make 来进行编译,下面是编译流程。其中/Users/xx...

2019-08-21 17:13:32 637

原创 使用Android.mk编译gloox库

由于项目需要,用了gloox库,但是gloox官网没有很详细的编译的makefile文件,所以花了点时间,使用Android.mk来编译。首先大部分的编译脚本是https://github.com/rxwen/gloox/blob/master/Android.mk这个提供的。我是在他的基础上进行编译,出了问题进行一些修改,下面的是在本机上试验通过的。如果使用如下编译有std::str...

2019-08-14 17:20:27 362

原创 Android gradle aar不能传递依赖

先来看下gradle依赖的几种常见的关键词新配置 已弃用配置 行为 本Module 上层Module implementation compile 依赖项在编译时对模块可用,并且仅在运行时对模块的消费者可用。 对于大型多项目构建,使用implementation而不是api/compile可以显著缩短构建时间,因为它可以减少构建系统需要重新...

2019-07-23 15:18:56 5307 2

原创 Android屏幕旋转四个方向准确监听

在做相机开发时,遇到一个问题,就是需要监听屏幕旋转。最简单的就是使用onConfigurationChanged()和OrientationEventListener这两种方法来实现,但是最后都遇到了问题。#1 一开始是使用onConfigurationChanged()这个回调,重新Activity里面的这个方法就可以了,简单又方便。用了之后发现,它只能监听,横屏切竖屏的情况。左横屏切...

2019-07-18 16:48:49 7091 4

原创 五幅图学会Android Canvas的坐标系变换(rotate translate scale)

在写公司项目的时候,需要画一个垂直的SeekBar,一开始就是简单的在xml文件里面,添加了android:rotate="-90"这个配置,不过后面发现很多问题。最后网上查资料,使用了Canvas.rotate()和Canvas.translate()的结合,实现了垂直的SeekBar布局。一.Canvas的坐标系介绍一般来讲,一个自定义view的canvas的显示区域就是View的...

2019-04-30 12:43:32 4399

原创 Java基本数值类型取值范围

这里介绍一下Java的几个基本类型Short Integer Long Float Double,以及他们的取值范围,内存占用字节数,还有他们在内存中具体是如何存储的。1.Short  2字节取值范围是-2^15 ~ (2^15-1) public final class Short extends Number implements Comparable&lt;Short&gt; ...

2019-01-07 14:31:14 393

原创 Wireshark分析tcp三次握手HTTP请求过程以及四次挥手

这里介绍一下,使用Wireshark抓包来看,tcp三次握手HTTP请求过程以及四次挥手。上面几个过程具体就不介绍了,大家可以去其他博文查看,这里使用wireshark来分析,主要目的是对以往学习的知识进行一次考验以及加固,顺便可以学习一下wireshark,有些时候遇到http请求失败啊什么的情况下,有可能是tcp层出现的问题,就必须要使用wireshark来进行分析了。大花瓶已经无能为力了。...

2018-11-16 16:44:46 2749

原创 Android退到后台与切到前台

最近开发了一款TV版app,主要功能是视频通话,所以要求机顶盒是一开机,就要把app打开,因为时刻有别人打过来。然后点击返回按钮,需要把app切到后台,但是app仍需要存活,需要收到消息。所以这里就设计到了app退到后台与切到前台的功能。app退到后台1.一般情况下,是启动Home页就可以实现这个功能,代码如下Intent intent = new Intent(Intent.ACT...

2018-09-18 16:40:49 13486 1

原创 阅读ViewGroup源码解决SurfaceView叠加切换TouchEvent事件冲突问题

先说说故事背景吧,要开发类似微信视频聊天功能,就是两个SurfaceView叠加,然后有按钮可以切换大小屏(对方画面和自己预览画面)(两个SurfaceView层级切换,见另一篇文章),这个时候有个功能是,需要小的屏幕可以拖拽,悬停。故事背景大概是这样。本文有点长,是讲解原理的,伸手党,可能要有点耐心看完本文才有答案。描述:这是图一页面大概是这样,A和B是两个SurfaceView,点击小的画面可...

2018-07-11 15:40:44 938 2

原创 Java泛型全面解析

Java中的泛型可以说让新手一头雾水,而且多个泛型同时使用会让人一脸懵逼。现在就来看看各个情况吧。 1.最简单的泛型举例 public class TTest&lt;T&gt; { public void test(){ List&lt;T&gt; list = new ArrayList&lt;&gt;(); } public sta...

2018-04-27 11:26:15 374

原创 Java中new String()和intern()的那些事

今天主要是想讨论下面试中常见的String  s = new String("abc");创建了几个对象,还有String.intern()方法有什么作用。本文后面所有的结论都是基于jdk1.7及以上版本的。1.String  s = new String("abc")创建了几个对象答案是一个或者是两个String s1 = new String("abc");String s2 = new S...

2018-04-04 16:12:15 2390 6

原创 使用WireShark深入理解HTTPS原理

前端开发,移动开发,后台开发,都应该知道HTTP通信,而且现在一些大厂都已经使用HTTPS进行通信,那HTTPS到底是什么呢,有什么好处呢? 一.为什么要使用HTTPShttp是一种通信上极为简便的协议,他本身不带有安全功能,http包在网络上传输的过程中难免会被人窃听,篡改甚至拦截。有时候一些比较隐私的数据比如个人账号密码身份证号码,银行卡账号密码,是绝对不能被人知道的,那这个时候该...

2018-03-27 12:21:47 2585

原创 Android 下拉刷新控件XListView原理解析

在Android app开发过程中,使用下拉刷新控件的机会是非常多的,比如列表页或是首页,一般都是要下拉刷新的。在Github中下拉刷新控件有很多,但是我现在介绍的是已经停更很久的XListView,因为我觉得这个库写的简介明了,功能稳定,bug少。非常适合自己学习下拉刷新的原理。面试的时候也通常会问到某些控件的原理,所以,了解一下还是很有必要的。XListView在github中的仓库:http...

2018-03-15 10:59:08 337

原创 iphone手机充电口耳机孔接触不良

手机用久了,充电的时候动一下,数据线就滑出来,要是不注意看,有时候放着充一晚上,也没充进去电。耳机孔也是一样,用久了,就感觉接触不良,要多钮几下,声音才会正常。这个问题困扰了我很久,终于发现是充电口进入了很多衣服纤维,使用牙签,把这些纤维抠出来就好了。...

2018-03-07 09:56:03 4802

原创 Android Studio升级Gradle 4.1后出现 class not found

Android Studio 升级到3.0以后,出现的Android Profiler功能挺好用的,但是有要求,gradle要升级到4.1才能使用,那就升级吧。然后就出现了各种各样的问题。。。问题1描述:出现 class not found的异常问题1解决方案:出现这个问题还有一个条件就是,在app/build.gradle 中配置了android{ default{ multi

2018-02-06 15:45:57 892

原创 Android 大小两个Surface切换

在视频聊天app中一般会有这样的场景,一个大的Surface显示对方的画面,一个略小的Surface显示自己的画面(类似于微信视频聊天),然后点击一下小的那个Surface,会把两个画面对调。今天就来看看,这个是怎么实现的。

2017-12-05 11:14:09 4723 16

原创 Android jni c/c++传递实体类到java

上一篇文章讲了c/c++与java之间如何传递参数,但是有些时候c层会传递过来一个实体类,最开始,我是把实体类里面的参数都拆出来,一个一个传递到java层去,这样实现上没任何问题,但是太过繁琐。就去找了直接传递实体类的方法。 传递基础类型的方法,这里就不再赘述,有需要的可以看我上一篇博客。这里就在它的基础上进行讲解。

2017-11-27 16:48:35 1056

原创 Android JNI-c/c++调用java方法

在使用ndk开发的时候,java调用c/c++方法是必须要的。但是很多时候,c/c++有callback需要反馈给java的时候(比如IM通讯登录成功信息和一些异常信息),就需要c/c++调用java方法了。 在看这篇文章之前,必须对JNI有一些基础的了解,比如java调用c/c++方法,java和c/c++ jni在一些基本类型上的对应(int对应jint等)。

2017-10-25 11:16:12 2348

原创 gradle 编译jar包+混淆

来到新的公司,新的环境,不过用的技术还是比较老的,特别是Android客户端的,还在使用eclipse来开发,自动编译脚本编译jar包也是使用eclipse的目录结构,所以必须得有所改变了。 把eclipse改为Android Studio自然是比较方便的,但是为了让一大套的autobuild仍然可以跑起来,就要花点时间了。由于我们公司是做sdk开发的,所以必须要导出jar,

2017-07-05 17:22:32 2614

原创 java.lang.NoClassDefFoundError: android/os/PersistableBundle

在Android 4.x版本的手机上,在Activity页面,重写下面方法,会导致crush,报java.lang.NoClassDefFoundError: android/os/PersistableBundle的异常。

2017-04-22 15:48:27 656

原创 Glide 图片生命周期

Glide 图片生命周期这个主题本来想最先讲的,因为它在源码的最前面,但是觉得还是要对整体有理解之后再看这个,帮助会更大。Glide有一个显著的特点,就是图片加载与否,会根据依赖的容器的生命周期来变化。还是一样的,先提出几个问题,Glide是如何根据Activity或Fragment的生命周期来控制它的生命周期呢?这样控制有什么好处?

2017-03-30 10:51:13 852 2

原创 FragmentTabHost页面重叠

在使用FragmentTabHost+Fragment作为首页的时候,如果Fragment内使用了,SwipeRefreshLayout,当正在刷新的时候,如果进行切换Tab的操作,就会导致两个Fragment的重叠。引起这个bug的原因是,SwipeRefreshLayout正在刷新的时候,调用view.setVisibility(View.GONE)是无法起效果的。

2017-03-29 14:14:12 1085

原创 FragmentTabHost “can not perform this action after onSaveInstanceState”

当我们在使用Fragment+FragmentTabHost作为首页导航的时候可能会出现”can not perform this action after onSaveInstanceState”的异常。

2017-03-22 09:48:19 664

原创 Glide解析-图片转换过程

上一期介绍了Glide的memory cache机制架构,也就是图片从内存缓存中获取的,忽略了Glide从disk中获取缓存图片,今天我们就来讲讲Glide从disk或者网络获取图片,并且一步步转化为我们ImageView可以显示的格式。同样也会先提出一些疑问,Glide中source和result缓存策略分别是什么意思?如果是本地图片,是否也会缓存到disk?

2017-03-20 14:55:39 3040

原创 Glide解析-cache

上一篇博客"Glide解析-概述"中介绍了Glide的整体框架,有了整体认识之后,我们再来各个击破,今天介绍的是Glide关于cache的处理。首先我们要带着疑问去看源码,图片是如何做到复用的?图片缓存一共有几级?分别是哪几级?图片是何时被缓存,又是何时被加载的?

2017-03-16 21:24:54 4207 1

原创 Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案

现在使用Android Studio的开发人员越来越多,自然避免不了debug版本和release版本都需要安装在同一个手机上的场景。 但是,有时候安装了debug版本后再安装release版本,会遇到这样的问题,Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER,这个问题的字面意思就是provider冲突了。

2016-12-28 09:38:40 2554

原创 使用iPhone来提醒自己-日历和提醒事项

在iPhone中,一些系统自带的应用的使用体验也是不错的。日历和提醒事项就是我今天要推荐的两个系统自带应用。

2016-12-26 14:25:38 9361

原创 Android车牌识别,从图片识别到扫描识别

由于项目中用到了车牌识别的功能,就研究下了扫描的一些逻辑。

2016-12-20 15:32:49 8114 8

原创 Android序列化的两种方法

在Android的开发中,经常需要参数的传递,从一个Activity传到另一个Activity,或者从Activity传到Service,系统自身支持一些java基础类型的传递,但是复杂的自定义类型,就需要序列化以后才可以传递。

2016-10-25 14:36:20 695

原创 Java中反射机制简介

“反射”听这个名字有点高级的样子,它实际的作用是什么呢,就是可以在程序运行时去加载某个类,或去调用某个类里面的方法(这是我的理解)

2016-10-21 11:36:54 287

原创 Android TransformException:java.util.zip.ZipException

在使用Android Studio编译项目时,有可能会遇到以下问题,Execution failed for task : ‘:transformClassedWithJarMergingForDebug’ > com.android.build.api.transform.TransformException : java.util.zip.ZipException:duplicate entry

2016-10-19 14:54:15 5988

原创 Android中带分割线的GridView-LineGridView

在Android项目开发中,有时候需要带分割线的GridView,一般情况下是做类似九宫格的功能。有时候可以直接留出边距就可以,底部背景就可以当做分割线了。但要是设计比较刁,非得要分割线跟背景颜色不同呢,那就用LineGridView吧。

2016-10-11 16:49:03 3994

原创 Android常用的数据结构

Android中一般使用的数据结构有java中的基础数据结构Set, List, Map。还有一些Android中特有的几个,SparseArray(使用Map时Key是int类型的时候可以用这个代替)等。

2016-10-10 19:19:01 14534

原创 Android实现异步的几种方法

在Android项目中,有经验的开发人员都知道,一些耗时的IO操作等都必须在子线程中去操作,那么可以有哪些方法来开启子线程呢,一般可以使用Java中自带的几种方法,也可以使用Andorid特有的一些类。

2016-10-10 11:38:54 27036 1

原创 Android源码-Volley

前段时间去面试,发现现在的公司还是挺看重对于底层的理解,一般会问下对于HTTP的理解,这里就介绍一下Google官方出的一个HTTP框架volley。 volley的使用网上有很多,比如说http://blog.csdn.net/fenghai22/article/details/44061307VolleyRequestQueue mRequest = Volley.newRequestQue

2016-04-05 17:39:59 382

原创 Android源码-SparseArray

在安卓开发过程中用到Map的时候,然后key类型为Integer的话,会提示“使用SparseArray来得到更好的效率”。接下来看看,为什么SparseArray会有比HashMap更好的效率。

2016-03-31 14:30:18 279

空空如也

空空如也

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

TA关注的人

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