自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AS3.0 性能分析工具Profier使用总结

在AndroidStudio3.0中,以前的 Android Monitor 不在了,取而代之的是Android Profiler,参照官方文档学习了其使用方式,总结如下:1:Android Profiler的使用流程:1.点击工具栏的图标即可打开在Android Profiler窗口的顶部,如图所示,选择设备1和你想要配置的app进程2当我们连接一个设备后,打

2017-12-22 15:06:04 3124

转载 提升Android下内存的使用意识和排查能力

【转自】https://yq.aliyun.com/articles/225751?utm_content=m_32842       内存问题一直是大型App的开发人员比较头痛的问题,特别是像手淘这种超级的App,App中到处都是带有图片和视频的界面,而且这些功能都是由不同的团队甚至不同的事业部开发的,要整体上去管控和排查内存的问题变得相当的复杂。之前,我们多个线上版本都存在着严重的Ac

2017-10-25 20:42:23 673

原创 OkHttp的拦截器机制分析

1 概述AOP 编程。每次的 proceed 是执行点,可以在执行点的前面和后面添加需要的业务逻辑。比如打打日志,失败重试,添加缓存等等拦截器就是基于责任链模式,每个节点有自己的职责,同时可以选择是否把任务传递给下一个环节拦截器的设计,可以像工厂流水线一样,传递用户发起的请求 Request,每一个拦截器完成相应的功能,从失败重试和重定向实现、请求头的修改和Cookie 的处理,缓存的处理,

2017-10-23 13:38:37 510

原创 深入分析ThreadPoolExecutor之二

概述ThreadPoolExecutor 不是一个人在战斗。它的实现是有多个组件一起配合的。这里做下对他们的身份,一些原理、机制等等做一个简要说明。这个是后面我们去理解 ThreadPoolExecutor 源码的基础。ThreadThread 无需多讲,就是用来执行 Runnable 的线程。JVM 的线程和操作系统的线程是对应的。Thread 很多方法最终都会执行到 native 方法

2017-10-21 22:04:18 398

原创 深入分析ThreadPoolExecutor之一

概述首先思考,为什么要复用线程,使用线程池?需要的时候新创建一个,不用的时候再关闭不就挺好的?线程的创建和销毁涉及到系统调用等等,是比较消耗 CPU 资源的。如果线程本身执行的任务时间短,创建和销毁线程所耗费的资源就会占很大比例,对系统起源和运行时间上是一个瓶颈。我们的任务会被封装在 Runnable 中,在线程启动的时候去执行。那么,如果这些任务执行都很快,又不想把时间浪费在线程的创建和销

2017-10-21 21:30:16 414

转载 在Android Studio中实现OpenCV人脸检测

【转自】http://www.jianshu.com/p/1fc91f9c9a67实习期间,由于公司项目需求学习了OpenCV,主要实现人脸检测和人脸识别。因个人在C++和NDK方面的能力欠缺,所以考虑利用OpenCV Java API实现项目需求,虽然学习和研究过程中遇到了不少问题,但最终还是成功了。OpenCV介绍OpenCV,即开源计算机视觉库,主要用作图像处理,具体官方网站

2017-10-17 22:16:45 3230 3

原创 Android设计模式之状态模式

前言状态模式和策略模式结构几乎完全一样,但是他们的本质却完全不同。状态模式中的行为是平行的,不可替换的;策略模式的行为是完全独立,可以相互替换。状态模式的理解状态模式中的行为由其状态来决定,不同的状态下有不同的行为。状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态的模式的意图是让一个对象在其内部状态改变的时候,其行为也随之发生改变。

2017-10-17 13:00:43 352

原创 分析并比较Java几种集合遍历的方式

集合类的通用遍历方式, 用迭代器迭代:Iterator it = list.iterator();while(it.hasNext()) {  Object obj = it.next();}Map遍历方式: 1、通过获取所有的key按照key来遍历//Set set = map.keySet(); //得到所有key的集合for (Integer in : m

2017-08-06 10:32:05 403

原创 总结Android Socket开发中可能遇到的问题

1. android网络请求需要放在工作线程中,socket通信也不例外;2. 当socket长连接建立成功后,如果手机屏幕关闭,只要过很短的时间,android系统就会将socket服务挂起,这种行为应该是出于节电考虑的,但体验会下去很多,因为总是自动断开。另外当我们的手机通过数据线连接电脑调试的时候,手机熄灭屏幕后,socket服务是不会被自动挂起的,似乎在调试模式下,手机不会自动进入节电

2017-07-31 14:13:07 3588 1

原创 Android UI卡顿原因及解决办法

渲染机制介绍为了分析UI卡顿,我们有必要理解一下渲染机制,这套渲染机制适用于绝大部分的屏幕渲染,其中包括Android手机等众多屏幕设备。一些参数先来举个例子,电源胶卷时代播放的电影是24帧/秒,也就是说一秒有24张胶片进行播放,这是早期的设定,比较低,因为交卷比较贵。随着科学技术的发展,屏幕的刷新速度有了一个质的飞跃。渲染的一些重要参数:屏幕刷新理想的频率(硬件的角度

2017-07-24 18:38:04 11230 4

原创 Git使用总结

用户配置配置用户名和邮箱(一般来说需要配置的就这两个)git config --global user.name "名字"git config --global user.email "邮箱"查看配置信息git配置有system级别 global(用户级别)和local(当前仓库)3个,设置先从system(系统级别)->global(用户级别,也就是所有仓库)->local(当

2017-07-22 23:26:59 340

原创 关于设计模式的六大原则简介

1. 单一职责原则(SRP)定义:就一个类而言,应该仅有一个引起它变化的原因。从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到破坏。比如我经常看到一些Android开发在Activity中写Bean

2017-07-21 14:47:05 316

原创 Android进行绘制优化的技巧

前言我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升。当然这只是布局优化的一方面,那么如何来进行布局的分析和优化呢?本篇文章会给你一个满意的答案。1.布局优化工具在讲到如何去布局优化前,我们先来学习两种布局优化的工具。1.1 Hierarchy ViewerHierarchy Viewer是Android SDK自

2017-07-18 00:37:20 580

原创 JavaGC算法介绍与分析

1.标记-清除算法标记-清除算法(Mark-Sweep)是一种常见的基础垃圾收集算法,它将垃圾收集分为两个阶段:标记阶段:标记出可以回收的对象。清除阶段:回收被标记的对象所占用的空间。标记-清除算法之所以是基础的,是因为后面讲到的垃圾收集算法都是在此算法的基础上进行改进的。标记-清除算法的执行的过程如下图所示。标记-清除算法主要有两个缺点,一个是标记和清除的效率都不高,另一

2017-07-16 14:40:07 419

原创 浅谈JVM结构原理与数据区域

1.Java虚拟机概述Oracle官方定义的Java技术体系主要包括以下几个部分:Java程序设计语言各种平台的Java虚拟机Class文件格式Java API类库第三方Java类库可以把Java程序设计语言、Java虚拟机和Java API类库这三部分统称为JDK(Java Development Kit),它是Java程序开发的最小环境。另外,Java API中的Java SE

2017-07-16 00:32:25 472

原创 AsyncTask——AsyncTask串行and并行

一、前言AsyncTask,相信你不会陌生,也许你很幸运,早已了解了AsyncTask这个家伙挖的坑,也许你已经被坑过了,也许你没坑了,然而还没有发觉。本次笔者将带大家一起来看下AsyncTask这个坑是如何挖出来的。啥也不说啦,我们先来段代码看看1、首先创建一个AsyncTask类2、假设你这样运行new MyAsyncTask("MyAsyncTask#1").execut

2017-07-09 23:00:24 543

原创 利用Gson解析复杂json

使用 Gson 去解析 json 应该是很常见的,大部分的情况下我们只要创建一个 Gson 对象,然后根据 json 和对应的 Java 类去解析就可以了。Gson gson = new Gson();Person person = gson.form(json,Person.class);但是对于比较复杂的 json,比如下面这种, attributes 对应的 jsonObject

2017-06-26 22:50:38 1163

原创 Android View动画初步应用

View的动画的分类补间动画BetweenAnimation,也就是我们以前一般的Animation。帧动画FrameAnimation,通过animation-list实现。属性动画PropertyAnimation,从3.0及以后出现的(如果要兼容低版本,可以使用一个民间版第三方的一个jar NineOldAndroid.jar,用法跟系统的用法差不多)。不断地控制控件的属性变化达到动

2017-06-15 18:58:20 397

原创 两种方式实现Android侧滑菜单

侧滑菜单的两种实现使用DrawerLayout,灵活度比较高。使用DrawerLayout+NavigationView,这是谷歌对Material Design的一种标准化。使用DrawerLayout实现侧滑首先,我们需要一个布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/and

2017-06-13 19:02:23 4549

原创 RecyclerView的使用解析

RecyclerView基本介绍特点:谷歌在高级版本提出一个新的替代ListView、GridView的控件。高度解耦,但是用起来会比较难用,而且条目点击也需要自己处理。自带了性能优化。ViewHolder。需要注意的是:RecyclerView没有条目点击事件,需要自己写。Tips:软件的一个很重要的概念:低耦合高内聚。基本使用由于这个控件大家用得比较多,这里只是简单

2017-06-12 19:23:50 1493

原创 浅析Java中的Parcelable和Serializable

在日常的应用开发中,我们可能需要让某些对象离开内存空间,存储到物理磁盘,以便长期保存,同时也能减少对内存的压力,而在需要时再将其从磁盘读取到内存,比如将某个特定的对象保存到文件中,隔一段时间后再把它读取到内存中使用,那么该对象就需要实现序列化操作,在Java中可以使用Serializable接口实现对象的序列化,而在android中既可以使用Serializable接口实现对象序列化也可以使用Pa

2017-06-11 23:36:19 725

原创 IntentService初步应用和实例介绍

IntentService定义  IntentService继承与Service,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService。IntentService在onCreate()函数中通过HandlerThread单独开启一个线程来依次处理所有Intent请求对象所对应的任务。    这样以免事务处理阻塞主线程(AN

2017-06-11 23:29:40 300

翻译 HTTP 2.0与HTTP 1.1区别

1、什么是HTTP 2.0HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。 2、与HTTP 1.1相比,主要区别

2017-03-16 23:31:18 464

原创 轮播图效果实现详解

关于轮播图的介绍有很多,但是在android里,可以实现这个功能的方法并不多.这篇文章,就是对这些方法做个总结,算是一个记录(有的方式,只介绍下思路,因为我最终并不会采用)。方式一: 使用 ViewFlipperViewFlipper ,作为一个 ViewGroup 它可以控制它的子view切换. 就自动播放来说,它比viewpager更加强大,也更简单:setAuto

2017-03-10 22:33:04 732

原创 CoordinatorLayout初步应用

CoordinatorLayout简介CoordinatorLayout是在 Google IO/15 大会发布的,遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的效果CoordinatorLayout简介通常用来干什么Google官方地址Coordinat

2017-03-09 22:39:06 316

原创 彻底解决Android6.0权限管理问题

随着Android版本的不断更新,Google的Android开发人员也想到了Android应用在权限管理方面的各种问题,让好多用户摸不着头脑就使用了用户的隐私数据。 为了在权限这方面加强管理,安卓平台权限一直有被流氓应用随便利用诟病,Android M的发布彻底解决了这一问题,取而代之的是, app不得不在运行时一个一个询问用户授予权限。Android 6.0(api23)M系统中,做了一些限制

2017-03-08 23:21:57 5885

原创 Socket在Android开发中的应用

一、Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。 那么,什

2017-03-07 23:20:48 459

原创 Android FAB应用解析

概览浮动操作按钮 (简称 FAB) 是: “一个特殊的promoted操作案例。因为一个浮动在UI之上的圆形图标而显得格外突出,同时它还具有特殊的手势行为”比如,如果我们在使用email app,在列出收件箱邮件列表的时候,promoted操作可能就是新建一封邮件。浮动操作按钮代表一个屏幕之内最基本的额操作。关于FAB按钮的更多信息和使用案例请参考谷

2017-02-22 09:22:05 2518 1

原创 Android inflater 应用分析

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用Layou

2016-12-29 16:18:19 374

空空如也

空空如也

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

TA关注的人

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