自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (5)
  • 收藏
  • 关注

原创 欢迎访问我的简书博客 http://www.jianshu.com/users/3b5c25e9ec5d/latest_articles

欢迎访问我的简书博客http://www.jianshu.com/users/3b5c25e9ec5d/latest_articles文章会同步发表在那里。

2016-10-26 10:00:20 1376

原创 Android事件传递机制详解(嵌套自定义View示例)

一、概述  自定义View如果嵌套了自定义View,可能简单写一个onTouchEvent处理事件已经不能解决你的需要。简单举个例子: 你自定义了一个容器View,简称为父View,在这里监听点击事件,做事情A,监听滑动做事情B 然后你又自定了一个View,放入该容器父View当中,也监听点击事件,当点击的时候做事件C,滑动时做事情D。上面的事件A、C不是互斥的,意

2016-10-20 17:40:10 1972

原创 Android 5.0内核和源代码学习(3)——SystemServer启动了什么服务?

一、综述       上一篇讲述Android启动过程的时候,在第四部的关键进程SystemServer讲的很粗略,只是简单介绍它启动了很多服务,那么它究竟启动了哪些服务,执行过程是怎么样的呢?这一次,我就通过源代码注释的方式介绍一下SystemServer.二、SystemServer源代码分析

2015-08-03 15:44:11 1082

原创 Android 5.0内核和源代码学习(2)——源码下载和系统启动过程分析

一、Android源码下载上一次简单介绍了Android系统的层次结构,这次开始动真格了——下载源码和分析源码!那么,Android的源码从哪下?当然是谷歌官网,下载方法官网也讲得很详细,但是奈何中国的墙比较厚,所以上面的办法是没用的,当然,有些是有用的,地址:http://source.android.com/source/downloading.html谷歌官网没办

2015-07-31 08:31:00 2192 10

原创 Android 5.0内核和源代码学习(1)——系统简介

做Android应用以来,但是总感觉蒙了一层雾,为什么是activity的生命周期是这样?为什么要分UI线程和其他线程?Android和Linux有什么区别?我想要知其所以然,而不是天天学习搬砖,语言技术总是在变,程序员总要抓住其中不变的内涵。

2015-07-30 11:19:36 2583

原创 Android 解决图文混排,图片和文字居中对齐问题(ImageSpan)

一. 概述众所周知,Android图文混排可以通过SpannableString来实现,通过在相应位置使用ImageSpan替换即可,但是使用过的人会发现,imageSpan只提供了两种对齐方式,如下所示: /** 底部对齐 */ public static final int ALIGN_BOTTOM = 0; /** 基线对齐 */

2017-04-10 17:20:55 9011 4

原创 正确应对系统内存不足,使用OnLowMemory和OnTrimMemory回调

理论上,一个具备良好行为的应用应该考虑Android系统内存紧张的问题,这样有助于维持一个良好的生态。在前人的基础上,本文对OnLowMemory和OnTrimMemory回调进行了总结。1. OnLowMemoryOnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLowMemory

2017-04-07 11:40:51 4206

原创 Android开源网络框架Retrofit(入门篇)

Restful风格接口基本成了业界主流,Retrofit框架也大火特火,最近项目中也决定更新换代,采用Retrofit。本着学习之余,也对接下来的学习者有一些帮助,于是写了本文,主要的内容是对官网内容的一个翻译和补充解释。 plus:本文假设你对于基本的HTTP协议有所了解。一、Retrofit简介Retrofit内部使用OKhttp来进行网络请求, 会把网络请求转化为一个java接口,使用

2016-12-12 19:08:03 657

原创 带你认识Google 屌炸天的AR项目——Project Tango

这两年虚拟现实VR和增强现实AR简直火的不要不要的,众多巨头都在发力,Google也推出了自己的AR技术解决方案,因为目前介绍Tango的中文资料还比较少,所以本人结合官网文档和自己的理解写了本文,如有错漏请不吝赐教。一、简介1. Tango是什么,可以用来干什么?Tango是Google的一个AR增强现实项目,配合其独特的移动设备和SDK可以方便的在应用中使用AR技术。2. Tango室内定位为

2016-12-02 18:44:09 9121 1

原创 Android和Unity混合开发——Activity和Unity脚本交互和信息传递

Unity3D集成:Android Activity和Unity脚本交互和信息传递 移动端项目中很有可能需要利用Unity来渲染3D模型。但是其他模块开发者仍旧采用native开发方式。那么就产生了一个需求,Android和Unity3D的混合开发方案。一、从本文拟可以学到什么如何先启动Android的本地MainActivity,根据需要启动Unity3D编写的场景。Android Ac

2016-12-02 16:56:15 9930 3

原创 Android圆形图片不求人,自定义View实现(BitmapShader使用)

在很多APP当中,圆形的图片是必不可少的元素,美观大方。本文将带领读者去实现一个圆形图片自定View,力求只用一个Java类来完成这件事情。一、先上效果图二、实现思路在定义View 的onMeasure()方法里设置View的宽高相等,应该取宽高中的最小值。在自定义View的onDraw()里面使用画笔paint结合BitmapShaper画出一个圆形区域。上述

2016-11-17 13:12:27 11311 3

原创 Android手把手教你实现滑动隐藏(GeastureDetector使用)

因为移动设备有限的显示屏幕,很多时候都需要在合适的时间去隐藏一些控件,比如滑动隐藏就是一个好的设计方案。本文将实现一个通用性较强的滑动隐藏方案,顺便采用了GeastureDetector这个好用的用户动作检查工具。一、本文拟实现的效果图最近下载了Now直播APP,发现它实现了一个比较流畅的滑动隐藏效果,具体看下面的GIF图。因为在老版本的模拟器上运行,显得有

2016-11-09 20:42:48 3261 1

原创 Android中高手必须了解的关于View的细节(进阶必备)

关于Android的视图体系,有一些位置、坐标系、定位的小细节可能开发者并没有注意到,本文将指出一些让人惊讶的小细节,并以实例证明。一、Android的视图组织体系不为人知的小细节众所周知Android中的view分为view和viewGroup,viewGroup又继承了view,两者组织起来成为一颗“视图树”。Actiity并不直接承载view,承载view的是An

2016-11-08 13:05:58 1523

原创 Java匿名内部类访问外部变量,为何需被标志为final?

对于Java语言中的final使用,大家应该很熟悉,可以修饰类,表示不可继承;可以修饰方法,表示不可被子类重写;可以修饰变量,表示不可以被二次赋值。那么,Java匿名内部类访问外部变量,为何需被标志为final?这跟上述三个特性有关系吗?一、问题的提出Java编程中,使用匿名内部类访问外部方法的局部变量是一件很常见的事件,比如以下代码,使用匿名内部类设置控件的监听器是再常见不过

2016-11-06 14:41:26 1417

原创 Android Data Binding简介+示例

MVC、MVP又到MVVM,随着技术的进步,开发设计模式也在演进,Google在2015 IO 大会上带来的 Data Binding 库使得 Android 开发者可以方便的实现 MVVM 架构模式。使用DataBinding可以改善应用程序的开发,使代码更加干净优雅。本文将简单介绍DataBinding框架,通过实例展示其用法,算是当一个官网的翻译搬运工吧。一. DataBindi

2016-10-31 21:36:00 381

原创 Android Context导致的内存泄漏分析(示例代码+分析工具使用)

Android开发中因为有限的内存,以及防止OOM问题出现,解决内存泄漏问题将是开发者一直持续下去的工作。本文就分析了不当使用(持有)context导致的内存泄漏。1. 为什么使用Context有可能会导致内存泄漏?首先从context的本质谈起,context名称上代表了上下文,实质上是Application、Activity或Service的一个引用。因此如果有生命周期较长

2016-10-26 12:08:01 1912

原创 Activity生命周期的自测(对网上一些说法进行纠正)

发现网上一些对于生命周期的说法有问题,于是自己写代码测试一下,并结合官网的说明,对一些说法进行纠正。标红的字体就是对网上一些说法的纠正。1. 基本的声明周期以下来自官网的说明: https://developer.android.com/guide/components/activities.htmlpublic class ExampleActivity ex

2016-10-25 18:17:36 334

原创 Android将任务抛到UI线程的几种方法

有的时候,我们希望能将任务抛回到UI线程去做,比如修改界面。如果当前没有处在UI线程,那应该怎么把任务抛到UI线程去呢?以下是Android系统提供的3个将任务抛回UI线程的方法Activity.runOnUiThread(Runnable)View.post(Runnable)View.postDelayed(Runnable, long)例如,在某一个线程中,通过V

2016-10-25 15:00:45 859

原创 Android性能优化大纲(自我总结)

Android性能优化是开发者必须掌握的知识,因为已经有很多文章写Android性能优化的方方面面,因此,本文只做纲领性的阐述,指出Android哪些方面可以优化,限于笔者经验有限,如有不足请留言指出。一. Android性能优化的目标说一千,道一万,Android性能优化无非跟下面4个方面有关,而前4个因素或多或少和电量优化联系起来。提升响应速度提升UI运行(渲染)速

2016-10-24 22:01:43 460

原创 AsyncTask为什么可以在回调中修改UI(源码分析)

今天偶然想到了使用AsyncTask异步任务栈,可以在onPostExecute()中修改UI,这不是一个很奇怪的现象吗?于是便萌发想法看看源码这到底是怎么回事。一、AsyncTask的使用介绍还记得AsyncTask的使用方法不?主要是重写几个方法protected void onPreExecute() //开始前protected void onProgressU

2016-10-24 21:24:44 405

原创 Android Studio中使用junit做单元测试

Android Studio中使用junit做单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。比如一个函数,一个方法等。关于单元测试要不要做,由谁来做这些问题暂时抛到一边。本文只是单纯的介绍如何用Android Studio做单元测试。1. 确保你的工程添加了junit依赖,目前一般都会自动添加该项。dependencies {

2016-10-24 15:29:14 7170

原创 Android手把手教你实现卡片式瀑布流效果(RecyclerView+CardView,附源码)

Android手把手教你实现卡片式瀑布流效果卡片式的瀑布流效果是一种非常美观的UI设计,自从Android 5.0的 RecyclerView出现以后,实现瀑布流变得十分简单,本文将一步步带领读者去实现一个卡片式的瀑布流布局。一、先上效果图二、代码实现卡片式瀑布流1. 涉及到要使用的类和控件类或控件介绍作用

2016-10-22 17:20:36 5815 1

原创 Fresco图片框架简介及使用(可做圆角图片)

Fresco图片框架简介及使用Fresco是FaceBook推出的一个Android开源图片管理框架,它提供了图片下载、渐进式加载、内存管理等功能,很大程度上把程序员从繁琐的图片管理工作中解放了出来,官网地址,Fresco API。一. 特性介绍1. Image PipelineFresco 中设计有一个叫做 Image Pipeline 的模块。它负责从网

2016-10-22 14:12:26 1268

原创 Android中用到了哪些设计模式?

所谓活学活用,学习了设计模式,作为一个Android开发者,你知道Android中哪些地方使用到了设计模式吗?1. 简单工厂模式——BitmapFactory将具体的实例化工作交给一个静态的工厂类来负责,BitmapFactory正是完美符合此思想。2. 原型模式——各个对象的clone方法,还有一些集合的copy方法。原型模式通过已有的类复制出一个新的对象,减

2016-10-21 17:09:52 942

原创 Android Studio常用快捷键总结(非常有用)

Android Studio快捷键(Windows版本)工欲善其事,必先利其器。Google推出Android Studio已经有些年头,但是很多人仍然在用Eclipse的快捷键。虽然用什么版本的快捷键并不重要,但是Eclipse版本提供的快捷键数量是小于Android Studio的。本文将总结本人在开发中常用的快捷键,一些众所周知的快捷键如格式化代码、双shift查询,就没

2016-10-21 09:27:15 989

原创 Android自定义View讲解加示例

Android自定义View是工程开发中必不可少的一项技能,项目中通过自定义View的方式造好各种内部需要的View,将会带来极大的使用方便。一、 自定义View的几种使用方式(1)自绘控件:使用canvas画出控件的样子(2)组合一些Android的控件:通过继承容器,将一些现有的组件组合起来成为一个固定的View(3)继承并扩展Android的控件:对原有的Andr

2016-10-19 14:34:30 509

原创 Android ImageView的scaleType属性解释

ImageView的scaleType的属性是用于指示图片应该如何缩放显示在图片控件上。 Android的scaleType有好几种,分别是matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXYandroid:scaleType="center"保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分

2016-08-02 15:58:27 262

原创 Java中接口和抽象类的区别你真的清楚吗?

一、引言      Java中抽象类和接口的区别你的真的全部知道吗?今天看见一片CSDN首页博文,感觉他总结的不是很好,于是自己亲自总结一下,结果发现很多意想不到的情况。那么先列一列总结出来的区别吧,这些你都知道吗?:         (1)抽象类单继承、接口多实现         (2)接口的所有成员变量都必须是public ,抽象类抽象方法必须是public,其他随意

2015-09-15 10:06:28 482 1

原创 java.util.concurrent包中线程安全的集合简介

一、线程安全的集合       Java中有很多支持多线程并发的集合,比如Hashtable、Vector但是这些“古老”的并发集合效率并不高,一般只支持一个线程对其进行读写(加锁是针对整张表)。从Java 5开始 Java在java.util.concurrent包中提供了更多,效率更高的线程安全集合。下面用一张图片来显示这些集合的继承实现关系。      注:java也可以使用coll

2015-09-11 14:10:41 1885

原创 Java 多线程中的任务分解机制-ForkJoinPool详解

一、任务分解问题和ForkJoinPool简介       在多线程并发编程中,有时候会遇到将大任务分解成小任务再并发执行的场景。Java 8新增的ForkJoinPool很好的支持了这个问题。       ForkJoinPool是一种支持任务分解的线程池,当提交给他的任务“过大”,他就会按照预先定义的规则将大任务分解成小任务,多线程并发执行。      一般要配合可分解任务接口Fo

2015-09-10 21:51:37 7300

原创 Java 中7种线程池详解+示例代码

一、线程池简介      周所周知,Java创建一个新线程的成本是比较高的。因此在面临大量的多线程任务时,采用线程池几乎成了惯用的做法,线程池其实也是设计模式中享元模式思想的一种应用。     一般线程池刚启动时会新建大量的(跟传入参数有关)空闲线程,程序将一个Runnable或者Callable对象传给线程池时,线程池会调用空闲线程执行他们的run()方法或者call()方法。执行完成后

2015-09-10 15:19:44 13546

原创 Java使用阻塞队列BlockingQueue实现线程同步

一、BlockingQueue简介       BlockingQueue是java.util.concurrent包提供的一个接口,经常被用于多线程编程中容纳任务队列。它提供了两个支持阻塞的方法:       put(E e):尝试把元素e放入队列中,如果队列已满,则阻塞当前线程,直到队列有空位。       take():尝试从队列中取元素,如果没有元素,则阻塞当前线程,直到取到元

2015-09-09 16:16:06 1445

原创 Java线程同步中的wait()和notify()使用简单示例

一、简介      有时候并发编程中,并不只是保证数据的一致性和操作的原子性,还需要使各个任务按正确的顺序执行。在Java中提供了多种方法来实现同步。这里使用wait()和notify()来实现一个简单的双线程交替工作的同步场景。      wait()是Object的方法,使得当前线程释放该Object的锁,同时可以设置一个等待时间。notify()也是Object的方法,通知某个等待该

2015-09-09 10:41:23 493

原创 Java中volatile的并发安全性分析

一、volatile的解释       当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。二、问题的发现     从volatile的定义上来看它看似应该能保证多个线程对volatile变量使用的同步,那么先来看一段代码。package com;public class Main { publi

2015-09-06 17:45:54 482

原创 Java 线程的suspend()和stop()不安全的原因

一、suspend()不安全的原因       在Java中线程的suspend()方法用于悬挂起一个线程,但是它之前持有的锁却没有释放。那么其他等待该锁的线程就会一直等待,直到该线程被resume(),那么在这种情况下,有可能造成循环等待,进而死锁。因此Java已经不推荐使用该方法。二、stop()方法不安全的原因      在Java中线程的stop()方法用于停止一个线程

2015-09-03 19:37:43 954

原创 java FutureTask的简单用法示例

一、Java Future简介        Java Future是Java实现线程的第三种方式,前两种是继承Thread和实现Runnable接口。那么Java future有什么优点呢?        (1)用它可以实现有返回值的线程  (2)它提供了一些良好的控制线程的方法:cancel,get等二、简单用法示例 (简单起见没有try catch)package

2015-09-03 18:59:07 586

原创 Java下载网络上的图片

一、今天有学弟想让我展示一下Java怎么下载图片,于是简单写了一下,发现估计很多初学者也想知道,于是就发上来了二、代码,这里我随便选了百度上的一张图片,也许之后不存在了,所以请大家灵活替换URL地址。package com;import java.io.File;import java.io.FileOutputStream;import java.io.Inp

2015-08-31 18:48:45 468

原创 Java IO体系中常用的流分类

2015-08-31 15:35:14 449

原创 C语言printf()函数详解和安全隐患

一、问题描述       二、进一步说明      请仔细注意看,有如下奇怪的现象        int a=5;        floatx=a;     //这里转换是没有问题的,%f打印x是 5.000000                printf("%d\n",a);           printf("%f\n",a);  //输出为什么是0.00

2015-08-12 16:48:47 6252 2

原创 Java统计二进制数中1的个数

一、问题描述        输入一个整数X,统计其二进制形式中1的个数。二、思路分析        粗略一看,似乎应该把X转化成二进制形式,然后遍历统计其中1的个数,但是这种方法首先转换二进制就很麻烦,然后还需要遍历统计。三、更巧妙的方法——利用位运算符&public int calculateNum(int x) { int countx = 0;

2015-08-10 17:11:19 1058

python基础教程(第二版)(书签版)

这是一本学习Python的相当好的书籍,而且本人自己制作了书签,更利于阅读

2015-08-28

Ubantu命令大全

这是经过本人整理的Ubantu命令大全,网页版,有目录和点击跳转,很好用。

2015-08-18

Android安卓中文API参考文档

很好的安卓中文参考API,已经做成CHM格式,值得移动开发的人员珍藏!

2013-09-23

JDK6.0 中文文档

javaAPI参考,很不错的东西。可以下了珍藏,不容错过!

2013-05-03

空空如也

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

TA关注的人

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