自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xpleemoon

人生的意义不在于拿一手好牌,而在于打好手里抓到的牌。

  • 博客(37)
  • 资源 (5)
  • 收藏
  • 关注

原创 基于ViewPager的轮播完美实现

引言在app中,轮播已是一种非常普遍的效果了,通常会出现在首页的列表头部进行banner(广告位)轮播展现。以下为轮播效果图: 轮播效果简单地可以拆分为: 循环:第一页左滑,能滑倒最后一页;最后一页右滑,能滑倒第一页。定时:设定一个时间单位,每隔一个时间单位触发自动滑动。这里又一个优化点,就是当页面pause或者destroy的时候,轮播的定时器也要跟随pause或者destroy。触点暂停

2016-01-31 16:14:37 807

原创 app推送架构设计之全局观

app推送架构设计之全局观BroadcastReceiver只负责显示Notification,而Service才是推送消息的实际执行者,那为何要如此设计呢? BroadcastReceiver生命周期最多只有8秒,超过8秒会造成ANR,而Service则不存在这个问题。很明显,BroadcastReceiver天生就是不适合处理复杂操作的组件。因此,考虑到未来推送的复杂性和扩展性,上图的具体处

2015-12-20 18:56:52 1222

原创 app重构之架构

历史我们的app经历了一次重构,在重构过程中将IDE切换到Android Studio,并且编译脚本从Ant切换到了Gradle。不介绍IDE和Gradle的优势,主要介绍重构后app的Architecture相关部分。 从0到1是一个开始,再从1到N又是另一个开始。Architecture当前我们的结构主要为4层:appcorelibmodel app依赖core,而core依赖

2015-12-04 14:54:41 1157

原创 layer-list实现阴影效果

为控件实现阴影效果,可以有多种方式:多个drawable层叠在一起(不好的实现是多个View层叠达到多个drawable的层叠效果,相对好的实现是在同一个View钟实现多个drawable的层叠)自定义viewMaterial Design中设置Z轴的方式本文的思路是多个drawable叠在一起,但是不额外使用View,通过layer-list可以将多个item按照顺序层叠在一起显示。首先来看

2015-11-20 16:21:50 3192

原创 Activity launchMode之singleTask与taskAffinity扫盲

Activity launchMode之singleTask与taskAffinity扫盲taskAffinitytaskAffinity是用来指示Activity属于哪一个Task的。taskAffinity能够决定以下两件事情(*前提是 Activity的launchMode为singleTask或者设置了FLAG_ACTIVITY_NEW_TASK***): re-parentActi

2015-11-08 21:30:59 754

翻译 Android图片资源命名规范

Use common naming conventions for icon assetsTry to name files so that related assets will group together inside a directory when they are sorted alphabetically. In particular, it helps to use a common

2015-09-17 23:23:04 1312

原创 公钥系统之RSA原理验证

在公钥系统中,我们采用公钥加密,私钥解密的方式,使得报文能够比较安全的传输。假设A和B通信,但他们之间不通过对称密钥,B有一个公钥K+BK_B^+和一个私钥K−BK_B^-。为了与B实现通信,A首先需要获得B的公钥K+BK_B^+对报文m进行加密,即K+B(m)K_B^+(m);B收到A的加密报文后用私钥K−BK_B^-进行解密,即K−B(K+B(m))=mK_B^-(K_B^+(m))=m。

2015-07-31 13:25:51 1605

原创 Android的Message Pool是个什么鬼,Message Pool会否引起OOM——源码角度分析

Android中,我们在线程之间通信传递通常采用Android的消息机制,而这机制传递的正是Message。通常,我们使用Message.obtain()和Handler.obtainMessage()从Message Pool中获取Message,避免直接构造Message。那么Android会否因为Message Pool缓存的Message对象而造成OOM呢?对于这个问题,我可以明确的说AP

2015-07-14 11:38:04 2198 1

原创 浅析Java线程的正确停止

线程错误终止之destroy与stop方法记得以前初学Java的时候,由于缺少对锁、同步、异步等这些线程的知识,想当然的以为destroy与stop方法都能正确的停止Java线程的执行。但是,后来随着工作的积累,以及对线程安全的一些理解,慢慢认识到这两个方法是有问题的,并且这两方法也早已在java doc上被指名是弃用的。destroy()这个方法其实根本没干什么事情,只是抛出了一个NoS

2015-04-20 00:16:17 8625 1

原创 浅析Fragment为什么需要Public的empty constructor

最近,在做一个项目。当app启动后,然后使其进入后台进程(按home键),接着使用其它app(用其它app的目的是为了让系统内存不足,然后让系统将我们的app杀死)。当我们的app被系统杀死后,这时候通过任务管理点击我们的app进入应用。这时候问题出现了,app崩溃了,为了不暴露项目,一些项目包名或者类名的信息就用省略号显示了,下面就是异常的关键信息:java.lang.RuntimeExcept

2015-01-23 16:40:20 12663 5

转载 Android开发规范详解

一、Android编码规范1.java代码中不出现中文,最多注释中可以出现中文2.局部变量命名、静态成员变量命名只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开4.layout中的id命名命名模式为:view缩写_模块名称_view的逻辑名称view的缩写详情如下LayoutView:lv

2014-10-09 18:26:06 564

转载 关于android应用退出的问题

看到很多关于应用退出的问题,今天在这里为大家简单总结一下,如果说的不对还望大家见谅。方法一:System.exit(0) 和android.os.Process.killProcess(android.os.Process.myPid()),我想很多人都尝试过,当关 闭多个Activity的时候这两个方法根本不起作用,原因当然和Activity的堆栈管理有关。方法二:restart

2014-10-09 18:24:36 2292

原创 Timer与AlarmManager的区别

线程通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,但此时并没有运行,它需要CPU时间片。一旦得到CPU时间片,就会执行run()方法。run()的方法体称为线程体,它包含了要执行的这个线程的内容,run()方法运行结束,此线程也随即终止。线程状态转换一、新建(new):新创建了一个线程对象。二、可运行(runnable):线程

2014-07-18 14:08:56 5063 2

转载 学习篇

C++ 书籍:C++从入门到精通 ,请尽量阅读所有该豆列中的书籍,尤其是 《Effective C++》/《Effective STL》/《深度探索 C++ 对象模型》。C++博客篇:(一),C++ 虚函数表解析,(二),C++ 对象的内存布局(上),(三),C++ 对象的内存布局(下)Android书籍:框架篇:Android框架揭秘,底层细节篇:Android系统源代码情景

2014-07-01 16:13:16 583

翻译 Android——硬件加速(Hardware Acceleration)

从Android3.0(API Level 11)开始,Android 2D渲染管道能够更好的支持硬件加速。硬件加速执行的所有的绘图操作都是使用GPU在View对象的画布上来进行的。因为启用硬件加速会增加资源的需求,因此这样的应用会占用更多的内存。启用硬件加速的最容易的方法是给整个应用程序都打开全局硬件加速功能。如果应用程序只使用标准的View和Drawable,那么打开全局硬件加速不会导致任

2014-05-10 19:13:05 4469

原创 探索FragmentTransaction#commit()抛出IllegalStateException

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState——简单来说,就是在onSaveInstanceState()方法被调用后执行FragmentTransaction#commit(),由于状态丢失,而抛出IllegalStateException。下面就来进行分析下FragmentTransaction#commit()抛出这段异常的深层原因。

2014-04-30 17:54:20 2548 2

转载 Java for-each循环解惑

从Java5起,在Java中有了for-each循环,可以用来循环遍历collection和array。For each循环允许你在无需保持传统for循环中的索引,或在使用iterator /ListIterator时无需调用while循环中的hasNext()方法就能遍历collection。Java中,for-each循环简化了任何Collection或array的遍历过程,但并不是每个Jav

2014-04-25 11:10:18 2596

原创 Android——源码角度分析View的scrollBy()和scrollTo()的参数正负问题

在做分析之前,首先要建立起Android设备屏幕的平面直角坐标系概念。在Android手机中,屏幕的直角坐标轴概念简单来说:屏幕左上角为直角坐标系的原点(0,0)从原点出发向左为X轴负方向,向右为X轴正方向从原点出发向上为Y轴负方向,向下为Y轴正方向

2014-04-21 14:55:44 3515 3

翻译 Android——Intent和Intent过滤器

Intent就是一个激活组件的消息对象,用于组件之间的通信。需要注意的是,能被Intent激活通信的组件只有三类:Activity、Service和BroadcastReceiver。对应这三类组件,Intent有下面三种使用场景:启动Activity:在app中,一个Activity就代表一个用户界面。以Intent为参数调用startActivity()启动一个Activity实例。这

2014-04-02 18:57:35 1118 1

原创 Java IO流和文件

流流的定义:流是对内存中一组有序数据从起点到终点传输的抽象概念。当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接;类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。这时候你就可以想象数据好像在这其中“流”动一样,如下图:输入流输出流综合上图,人站在程序的角度

2014-03-29 20:57:48 1047

转载 Android 显示原理简介

转自http://djt.qq.com/article/view/987现在越来越多的应用开始重视流畅度方面的测试,了解Android应用程序是如何在屏幕上显示的则是基础中的基础,就让我们一起看看小小屏幕中大大的学问。这也是我下篇文章——《Android应用流畅度测试分析》的基础。     首先,用一句话来概括一下Android应用程序显示的过程:Android应用程序调用

2014-03-28 12:10:55 874

转载 安卓开发者必备的42个链接

官方网站1、谷歌安卓开发者页面 这里是主站点,在这您可以找到一切资源帮助您开始安卓开发。此站包含了很多关于学习基础知识的资源,完整的API引用,以及你开始开发所需的各种工具。此站共分为五个部分:作为初学者,你应该从工具开始,这部分讲解了如何安装安卓SDK。教程为你提供了关于安卓的基本介绍,教给你如何写出你的第一个程序。它包括很多的资源,即便成为高级程序员你仍需阅读这里面的文章。AP

2014-03-26 18:48:37 704

原创 Android AbsListView子类反复调用getView()和getCount()问题分析

对于AbsListView子类,假设它的宽高是自适应的,你会发现getView()和getCount()会被疯狂的反复调用。即使在AbsListView子类设置完adapter后,getView()和getCount()也会被疯狂的调用10几次甚至更多。原因就在于measure过程,AbsListView子类会包含很多个item,而且由于AbsListView和Adapter机制的关系,会尽可能的

2014-03-26 18:43:51 909

原创 Android4.0以上源码中的DiskLruCache类简介

/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * Yo

2014-03-26 18:42:30 1069

原创 Android LruCache使用分析

LRU Cache数据结构的介绍可以参考前面的http://blog.csdn.net/xplee0576/article/details/22200537。  本文以Android LRUCache来做一个简单的介绍。我们已经知道LRU Cache是一个hash map+双向链表的数据结构,那么在Android的Java自然也逃不出这个框,谷歌在Android3.1(v4 library

2014-03-26 18:40:22 2065

原创 Android Binder简介

Android使用Linux的进程管理机制,以进程为单位分配虚拟地址空间。为了安全考虑,Android的不同进程之间是相互隔离的(进程之间被禁止直接交互)。如果进程间需要通信,必须通过Android的Linux内核提供的IPC机制实现间接通信。Linux使用的进程间通信有Socket、Signal、Pipe、Message Queue、Semaphore、Shared Memory等。但是,这

2014-03-26 18:31:40 509

转载 Android屏幕适配总结

转载自:http://www.eoeandroid.com/thread-173973-1-1.html一、细说layout_weight    目前最为推荐的Android多屏幕自适应解决方案。    该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的layout_width或layout_height的优先级就越高,一般横向布局中,决定的是layo

2014-03-26 18:28:10 640

转载 LRU Cache数据结构简介

什么是LRU Cache  LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间

2014-03-26 18:21:48 3283

转载 HashMap的工作原理

原文链接: Javarevisited 翻译: ImportNew.com - 唐小娟译文链接: http://www.importnew.com/7099.htmlHashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的

2014-03-26 18:19:47 627

转载 十大高明的Google搜索技巧

Google是一个非常精密成熟的搜索引擎,但大多数的用户都没有能完全地利用到它的能力。一般人就是在Google的搜索框中输入一两个关键字,然后点击“搜索”按钮,等着Google显示出它第一页的搜索结果。这是一个相当简单模式匹配算法的搜索,不幸的是,通常此时出现的大部分都是并不需要的结果。  其实,还是有更好的方式能够让搜索产生一些更少、更为准确的结果。你所需要做的事只是学习一些简单的技巧,你就

2014-03-26 18:15:44 688

转载 Google搜索技巧-入门篇

基本搜索  Google 查询简洁方便,仅需输入查询内容并敲一下回车键 (Enter),或单击“Google 搜索”按钮即可得到相关资料。  搜索两个及两个以上关键字  Google 只会返回那些符合您的全部查询条件的网页。不需要在关键词之间加上“and”或“+”。如果您想缩小搜索范围,只需输入更多的关键词,只要在关键词中间留空格就行了。  搜索结果不包含某些特定信息  如果要

2014-03-26 18:13:15 1182

原创 超线程(Hyper-Threading)

运行方式      每个单位时间内,一个CPU只能处理一个线程(操作系统:thread),以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。双核心技术是将两个一样的CPU放置于一个封装内(直接将两个CPU做成一个芯片)。而英特尔的Hyper-Threading技术是在CPU内部仅复制必要的资源、让CPU模拟成两个线程;也就是一个实体核心,两个逻辑

2014-03-26 18:10:56 2399

翻译 Android——<uses-sdk>

语法(SYNTAX):<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer" />被包含于(CONTAINED IN):说明(DESCRIPTION):这个元素用API

2014-03-26 17:58:44 678

翻译 Android——系统权限

Android是一个特权分隔的操作系统,每一个应用程序运行在不同的系统身份中(Linux的user ID和group ID)。系统部分和不同的身份被隔离开来。因此,Linux隔离了应用程序(与其它程序隔离,与系统隔离)。通过权限(permission)机制提供了附加的安全功能。权限机制强迫限制特定操作,比如操作一个特定进程执行和每个URI权限允许点对点地访问特定数据块。更多通用的Andro

2014-03-26 17:52:11 838

原创 Android——兼容性

两种类型的兼容性:设备兼容性和应用兼容性。设备的Android兼容性就是app能够正确运行的Android执行环境(Android execution environment)。Android执行环境的具体定义可参见 Android compatibility program,并且每个设备都必须通过CTS(Compatibility Test Suite)的兼容性认证。设备的Andro

2014-03-26 17:48:02 857

原创 Android Application基础

系统启动过程APK文件介绍APK是Android Package的缩写,即android安装包。APK 文件其实是zip 格式,但后缀名被修改为apk ,可以通过解压程序直接解压查看。apk 解压后,一般的可看到的目录结构如下:文件或目录作用AndroidManifest.xml文件程序全局配置文件,它描述了应用的名字、版本、权限、引用的库文件等等信

2014-03-26 17:35:33 739

原创 Android——内存管理基础

内存收集概念内存垃圾收集器(garbage collector)概念:自定内存管理。功能:分配内存、保证所有被引用的对象还在内存中、可以释放在运行的代码中不再引用的对象的内存。垃圾收集器避免了悬挂指针(dangling reference),原因是一个仍然被引用的对象永远不会内存回收并且也不会被认为已经被释放掉了。垃圾收集器解决了空间泄漏(space leaks)问题,原因是它

2014-03-26 17:18:51 881 1

Java编程思想第四版完整中文高清版PDF

《Java编程思想》是一本经典之作,从推出到现在已获得了无数大奖。 该书内容Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。

2013-10-16

Google技术大会:如何将你的Android使用界面更快和更高效益

Google技术大会:如何将你的Android使用界面更快和更高效益

2013-02-17

json详细总结介绍

json格式的详细总结,方便快速了解json格式,解析json

2013-02-17

sqlite快速入门

sqlite入门书籍,对于没有sql经验的也可以通过该文档学习

2013-02-04

空空如也

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

TA关注的人

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