自定义博客皮肤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 Fans

一个热爱Android,linux开源技术的人,简单,普通,但是不平凡。

  • 博客(107)
  • 资源 (2)
  • 问答 (3)
  • 收藏
  • 关注

原创 一次深入骨髓的 volatile 研究

移步:我的 github 博客

2020-05-30 15:20:39 439

原创 Java 并发——基石篇

本人的原文发表到知乎上了,由于文章比较长,懒得弄过来了,这里贴下链接吧:Java 并发——基石篇(上)Java 并发——基石篇(中)Java 并发——基石篇(下)抱歉了。...

2019-07-28 14:48:03 384

原创 Kotlin lambda学习

Table of Contents什么是 Lambda?Lambda 使用在作用域中访问变量成员引用集合中使用 lambdafilter 和 mapall、any、count 和 findgroupBy:将列表转为分组flatMap 和 flatten:处理嵌套集合序列创建序列和 java 一起工作的 lambda将 lambda 手动转换...

2019-04-20 17:48:55 1092

原创 java设计模式——FactoryMethod模式

模式概念这是工厂模式中比较简单的一种,大致思想和上篇提到的《java设计模式——TemplateMethod模式》 比较像。首先我们看一个图,这个图来自《图解设计模式》一书响应章节: 图中,提供了一个生产鱼的模具,然后我们可以使用不同的材料生产颜色,质感不一样的鱼,这个图很好地解释了工厂方法模式。 在Template Method模式中,我们在父类中规定处理流程,在子类中实现具体的细节...

2018-03-15 13:06:18 900

原创 java设计模式——TemplateMethod模式

模式定义所谓模板方法模式就是带有模板功能的模式,组成模板的的方法定义在的父类中。父类是一个抽象类,提供基本的抽象方法,并且提供一个子类不可复写的方法使用一定的算法包装需要子类实现的抽象方法。通过查看父类的代码,我们只能知道某个功能的基本实现算法,不能知道关键步骤(也就是抽象方法)的是实现,唯一能知道的就是父类是怎么调用这些方法的。实际的例子我们需要实现两种形式的字符显示,第一种是直...

2018-03-12 12:57:13 627

原创 java设计模式——导引

本系列文章是《图解设计模式》一书的学习笔记,主要阐述书中涉及的java通用的23种设计模式。以骨架的方式给出设计模式的主要内容,同时加入个人理解。我的阐述原则:简单,实用,使用简单明了的方式说明 配合UML类图说明,给出最简单的实例 每个设计模式给出代码量非常少的示例这么做的目的就是使用尽量简单的语言描述设计模式,这里吐槽一下有的文章描述,举了一堆复杂空洞的例子,然后阐述一堆让人看...

2018-03-02 15:34:26 328

原创 java设计模式——adapter模式

描述将现有的模块接口转换一下,以适配新的接口需求,用于填补“现有的程序“和“所需的程序“之间差异。通常也会被称为:wrapper(包装)模式。模式中的角色adapter模式中有以下主要角色: 1. target(对象) 该角色负责定义所需的方法,描述需要adapter转换之后的接口。 2. client(请求者) 转换之后的接口使用者,client通过adapter访问已有...

2018-03-02 15:21:21 6094

原创 基于RecyclerView实现的动态图片轮播器

基于RecyclerView实现的动态图片轮播器最近项目中需要大量使用图片轮播器,来动态运营页面顶部的推广信息。传统的实现都是基于viewpager来实现,但是实际做过的同学才知道这里面有很多不方便。 换一个思路,其实recyclerview也是提供了一个高效的列表实现机制,并且展示的方向和方式都是可以控制的,我们可以基于这个来实现一个轮播器。 这个轮播器至少有以下功能:可以选择是否

2018-01-16 16:47:43 1758

原创 Android module switch语句报错问题

在实际的项目中,大家经常将我们的项目差分成多个module以方便项目的并行开发。在moudle中,有一个问题很多人都遇见过,如下: 这种问题咋一看有点不理解,为什么我们的id不能在case中使用了呢?为了弄明白这个问题,我们先看下tv_title这个变量的定义,也就是R文件中的定义: 我们看到,这里的tv_title变量不是一个final的,但是我们switch中case条件必须是常量或

2017-09-12 15:00:11 1497

原创 优秀的Android开源框架(持续更新)

开源是软件发展的趋势,越来越多的人投入到开源世界中去。我们可以从开源世界中获得很多有益的东西,本着不重复造轮子的精神,我们应该充分利用这些开源项目的成果。本文会持续更新涌现出来的优秀开源框架。UIBottomNavigation实现类似微信底部导航栏效果: 项目地址: https://github.com/Ashok-Varma/BottomNavigation...

2017-03-02 12:59:56 8660

原创 Android之ListView详解

在Android的应用开发过程中,总是需要将一系列的数据进行列表式展示。这个时候最常用到的控件就是ListView了,这个控件是很多Android初学者(包括笔者也是,很长时间之后才弄明白的)都感觉比较难掌握的。本文就来梳理一下有关ListView开发的点点滴滴,希望对于初学Android编程的朋友有帮助。一个原始而简单的例子首先,我们看下关于ListView的简单使用方式。我们现在想要在ListV

2017-01-19 15:57:41 18420 1

原创 Android应用界面布局

Android的应用编写基本都会有一个界面,而Android应用的编写逻辑是遵循MVC模式的,它将界面和控制逻辑是分开的,这样一来,界面编写就和应用的业务逻辑是分开的,更改系统业务逻辑也无需改变前台界面,增强了应用的可维护性,降低长期开发成本。 在Android系统中,应用程序的界面是通过一系列的布局文件实现的。这些布局文件使用XML语法编写,使用标签中的属性指定界面上的视图控件本身的属性和控件之

2017-01-17 16:51:21 3439

原创 Debian Linux包管理机制

Debian是linux史上的一个非常重要的发行版(话说,笔者写这篇博客时使用的系统就是Debian 8.6,嘿嘿~~在工作中使用debian这两年来,感觉debina是异常稳定哦,注意是异常稳定,至少我这里从来没有出现过各种奇怪的灵异现象~~),这个发行版本是很多Linux的上游版本,比如Ubuntu等著名发行版。Debian的地位的取得不仅仅是因为它创造了一个坚如磐石的Linux发行版,更多的原

2017-01-12 10:52:12 5128 2

翻译 Java Native Interface(JNI)从零开始详细教程

==================================================================================== 首先声明:这边文章是我翻译的文章(看了很多关于JNI的介绍,只有这篇个人认为最好,因此忍不住想要翻译给国内的各位),请勿随意转载,尊重文章原作者。 文章原始链接:https://www3.ntu.edu.sg/home/ehch

2016-12-22 13:37:34 58500 9

原创 Heap Sort堆排序

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 转载自:http://www.cnblogs.com/kkun/archive/2011/11/23/2260286.html ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

2016-12-04 16:31:59 1282

原创 Binary Search Tree C语言实现

Binary Search Tree是数据结构中比较有用的一种二叉树结构,这种结构讲大量的数据进行平摊式分布,并且规定大的数在右边,小的数在左边,以这种方式存放的数据可以非常方便地做数据排序和检索。 关于BST的更多信息,可以查看这个链接(英文,讲的非常好,不得不赞):http://algs4.cs.princeton.edu/32bst/ 台湾国立清华大学韩永楷老师的MOOC(讲的超级棒,完爆

2016-12-04 13:18:10 4137 2

原创 Topological Sort拓扑排序

在计算机科学中有很多问题的本质就是一个排序的问题,排序中最简单直接的形式就是对一堆数字进行排序。但是还有一些情况和数字没有关系的,这些情况下也需要进行一定的排序。比如说,穿衣服的过程,你首先需要穿上内衣,然后才能穿上外套,继而才能带上手表等佩戴物。这些事情都是需要排序的,但是这些事情的排序就不是简单的数字排序,因为这里面压根就没有数字。 那么面对这样的问题,我们怎么排序呢?最容易想到的问题就是使用

2016-11-30 12:46:58 3310

原创 经典问题LCS(最大公共子串问题)C代码实现

LCS(Longest Commons Sequence)问题,也就是最长公共子串问题,是一个经典的算法问题。该问题在很多地方都会遇到。关于这个问题的解决方案,目前最佳的实现就是使用动态规划的方式进行实现,关于使用动态规划设计这个问题算法的过程,这里就不再描述了,网上有很多的描述,整理如下: wiki百科中的描述:https://en.wikipedia.org/wiki/Longest_comm

2016-11-29 16:38:12 1308

原创 ZeroMQ简明教程

今天发现一个非常不错的消息队列实现库,这个东西叫做ZeroMQ。我之前也接触过一些开源的消息队列实现,比如大名鼎鼎的RabbitMQ等。但是和这些实现相比而言,我发现ZeroMQ实现非常简洁,轻量级,并且运行效率极高。 ZeroMQ官网: http://zeromq.org/ 官方文档: http://zguide.zeromq.org/page:all ZeroMQ大道至简的设计风格非常

2016-11-28 17:42:31 7890

转载 深度优先与广度优先

文章转载自:http://blog.csdn.net/a45872055555/article/details/37543795今天做了道题目,《手机键盘输入》当按下23时,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。其实说白了,也就是全排列问题,将2代表的abc,和3代表的def输出组合的字符。我是按照普通方法,递归来写的,

2016-11-28 17:14:33 1491

转载 经典八大排序算法

**声明:本文转载自:http://blog.csdn.net/hguisu/article/details/7776068**概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。         当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速

2016-11-25 15:24:41 799

转载 Android开发者库整理

===================================================================================本文转自:http://blog.csdn.net/fishmai/article/details/52398462Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习。今天爬爬

2016-11-25 14:32:45 1073

原创 计算机系统总线

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 申明:这篇文章是我学习了哈尔滨工业大学计算机科学与技术系刘宏伟老师的mooc课程(参考教材为高教出版社出版的唐朔飞老师编写的《计算机组成原理(第二版)》)的课堂笔记整理,其中的截图来自刘宏伟老师上课的PPT,版权归刘宏伟老师所有。 ++++++++++++++++

2016-11-08 11:56:05 10907 1

原创 开始篇

早年读大学的时候拜读过俞甲子老师的大作《程序员的自我修养》一书,但是当时由于没有实际的工作经验,不能明白这些看似理论的,空洞的知识有什么用,所以只是泛泛地看了一下,并没有实际的思考。如今一晃眼已经工作两年多了,时间不长,但是也渐渐体会到了书中的知识才是一个真正程序员的护身法宝,这才是真正的江湖神功! 所以今天决定重新研读这本书,重新拾起那些本该掌握的知识。为了鼓励鞭策自己,也为了和大家一起分享知识

2016-11-07 14:23:59 805

原创 C++的inline

inline是C++/C的重要特性,主要用于减少函数调用时入栈和出栈操作带来的消耗,但是却使得我们的程序可能会变得庞大,所以说这是一个权衡的事情,典型的“以空间换取时间”的策略。可是,这个策略在很多情况下是可行的,因为相对于空间而言,时间往往显得更加重要一些。 但是inline函数的使用还有一些问题需要注意的,这里总结如下。inline函数是声明不是定义C++中的inline函数是一个声明不是定义

2016-08-23 22:28:15 689

原创 C++中的override

C++中的override与java等其他的OOP语言有一些不一样,在实现形式和概念上都有着不同。

2016-08-22 22:22:07 1196

原创 Linux中的共享库之版本管理

共享库也就是动态库,在linux中是随处可见的,这是由于动态链接有这众多优点,因此大量的程序开始使用动态链接的机制,所以你才会在linux这样的操作系统中看到大量的动态链接库的存在。但是随着linux系统架构的成熟,应用和系统软件生态系统的繁荣,导致linux中的动态库数量越来越多,并且同一个共享库还会有不同的版本,这个时候如果没有一个良好的动态库管理机制,那么势必会给长期的维护,升级造成极大的困难

2016-08-13 12:10:20 2225

原创 Android Settings(Preferences)开发

在Android的app开发中,很多时候我们的app需要提供用户一个用户体验统一的,友好的setting界面,也就是设置界面。在android系统中,就有一个settings设置的系统应用,专门用户设置系统的一些用户属性。那么这样的setting界面我们怎么开发呢?android为我们提供了一个程序员非常友好的preferences开发包:android.preference。这个开发包中,包含了众

2016-07-25 14:30:01 5202 1

原创 Android 6.0指纹识别App开发demo

在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊。在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,

2016-07-22 13:58:30 22501 35

原创 Android adb bugreport工具分析和使用

bugreport是什么,怎么用?Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境。而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作。Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具。这个工具使用起来十分简单,只要在终端执行(linux或者win):adb bugrepo

2016-07-19 11:53:25 76685 7

原创 Android 6.0 Overview Screen实现原理

Android 4.0中添加了一个很有用的特性,那就是overView Screen功能,也就是最近任务预览功能。这个功能提供了一个列表试图,方便用户简单快捷地了解到最近使用的app或者最近进行的任务。这个功能和iOS的最近任务在界面上很相似。在android 5.0中,这个任务得到了进一步的加强,在android 5.0之前overView Screen中显示的任务快照是不可以配置的,但是在and

2016-07-12 17:49:32 3954

原创 Android ActivityManagerService(AMS)的Activity管理

对于AMS来讲,Activity管理是它的核心工作,前面两篇文章都是讲AMS的启动流程和进程的管理,这两篇文章其实是为本文做铺垫的,只有理解了前面两篇文章才能更好地理解AMS的activity管理。在谈到Activity的管理的时候,就不得不说一下Activity的启动流程,说道activity的启动流程就要说一下进程启动的问题了,前面一片文章中我们已经分析了AMS的进程管理,这里需要补充的一点就是

2016-07-11 10:55:00 5311 1

原创 Android ActivityManagerService(AMS)的进程管理

Android中的AMS的职责是比较多的,其中一个比较重要的职责就是app进程的管理,比如我们调用startActivity方法启动一个activity的时候,可能对应的那个进程没有启动,因此需要启动那个进程,而且对于这个进程还要有一些必要的管理过程,比如将它放到LRU(least recently used)列表中去等。本文就AMS的进程管理基本逻辑和过程做一个简要的分析,以帮助大家弄清楚AMS的

2016-07-06 17:20:19 7081 3

原创 Android ActivityManagerService(AMS)的启动分析

Android中的AMS想必是做android开发的工程师耳熟能详的系统级别的服务,但是它又是如此地庞大(单单ActivityManagerService.java文件就2W+行代码),因此我们在学习它的时候总是不能找到实际的主线,很是混乱。这里我会连续写几篇文章从它的启动过程,主要业务逻辑,和别的模块之间的互操作逻辑等角度来向大家简单介绍一下它。这里我只能是抛砖引玉,简单介绍,不会面面俱到,因为A

2016-06-29 11:36:06 7078 8

原创 Java内部类和外部类互相访问问题

今天在分析android的AMS的时候,发现在AMS中出现了内部类访问外部类私有方法的操作,一时之间觉得有些奇怪:为毛private的方法可以被访问??之前的认识是private方法是不可以通过对象方式调用的,但是现在的代码确实这么做了!!为什么呢? 带着这个问题,我google了一下,最终找到了这个stackoverflow的帖子: http://stackoverflow.com/quest

2016-06-28 17:32:56 9351

原创 Android智能指针浅析

长久以来,C++中的内存管理问题一直让人头疼,空指针,野指针,内存泄露。。。。。。C++程序员看到这样的问题就是各种头大!这样的问题往往很难解决,尤其是代码架构比较庞大或者复杂的时候。但是同样是面向对象的JAVA语言却没有这个问题,为什么呢?因为java有GC,也就是垃圾回收而C++没有。C++的做法是:程序员必须做到在new一个对象之后当不需要使用它的时候必须delete这个对象。看来很好,没有问

2016-06-23 10:38:39 5179

原创 Android Support Library介绍

我们知道,android自第一代发布以来,它的版本更新迭代的速度可以说是非常快的,但是android又是一个移动操作系统,是面对所有的用户的,并不是一个行业专用的系统,这就是要求这个系统在频繁的更新中,必须使得已经存在运行的大规模的系统能够被新的版本兼容。要做到这一点主要就是要做好API的兼容问题,老的接口被废弃了,但是在新的系统版本上必须还能使用;新的接口老版本上没有,但是提供了极好的特性,开发者

2016-06-21 10:43:21 4610 1

原创 Android基于wifi的无线HID设备实现

偶然间突发奇想,想到能不能让我们的在我们的手机设备上滑动触摸屏进而控制pc上的鼠标移动,也就说把我们的android设备当成是pc设备的触摸板呢?要想实现这个目标,首先要想一想android设备和pc设备之间的通讯基础是什么?这个通讯技术必须是android和pc同时支持的,目前看来也就是wifi,蓝牙。首先说一下蓝牙,蓝牙是一个提供个人局域网的安全无线电通讯技术,相对于wifi而言,蓝牙的功耗相对

2016-06-14 10:56:44 5817 1

原创 面向对象的思想

1. 四个特征1.1 抽象性1.2 继承性1.3 封装性1.4 多态性2. 六个关系2.1 依赖2.2 关联2.3 继承(泛化)2.4 实现2.5 组合2.6 聚合3. 七个原则

2016-06-08 17:21:22 1299

原创 Android Training学习笔记之适配不同的设备

Android是一个开源的开放的操作系统,世界上的任何人都可以基于这个系统进行适合自己的定制活动。Android的这样一个特点使得android世界的碎片化很严重,形形色色的android设备太多太多。这就给app开发带来了不小的困难,保证app在不同的设备上的使用体验是一致的是每一个开发者必须考虑,但是很头疼的问题。Google在这块也做了很多的工作,尤其是在最新的android 6.0中,多设备

2016-06-08 13:53:36 4811

Java 并发——基石篇.pdf

Java 并发——基石篇 的 pdf 文档,原文章我发布在知乎上了: https://zhuanlan.zhihu.com/p/75532011 但是知乎的格式不太好看,另外有字数限制,我不得不将文档分为三个部分。 这里提供一份 pdf 格式的文档,格式比较好看,方便大家。

2019-07-28

CentOS 5.5 图形安装教程(超详细).

CentOS 5.5 图形安装教程(超详细),清晰度高,步骤很详细,拿出来和大家分享一下

2012-10-26

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

TA关注的人

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