2016年11月14日

摘要: Picasso 收到加载及显示图片的任务,创建 Request 并将它交给 Dispatcher,Dispatcher 分发任务到具体 RequestHandler,任务通过 MemoryCache 及 Handler(数据获取接口) 获取图片,图片获取成功后通过 PicassoDrawable 显 阅读全文
posted @ 2016-11-14 20:14 qkeyar 阅读(112) 评论(0) 推荐(0)
 
摘要: 和Picasso有90%相似度,但却比Picasso省内存,有助于APP的优化! Glide 的使用介绍 Android Glide Google 推荐加载图片框架(加载图片详解篇) 1). 导入库 2). 基础加载 Glide的with方法不光接受Context,还接受Activity 和 Fra 阅读全文
posted @ 2016-11-14 20:12 qkeyar 阅读(245) 评论(0) 推荐(0)
 
摘要: Fresco是Facebook公司的黑科技:http://fresco-cn.org/ 真三级缓存,变换后的BItmap(内存),变换前的原始图片(内存),硬盘缓存。在内存管理上做到了极致。对于重度图片使用的APP应该是非常好的。它一般是直接使用SimpleDraweeView来替换ImageVie 阅读全文
posted @ 2016-11-14 20:09 qkeyar 阅读(613) 评论(0) 推荐(0)
 
摘要: ImageLoader 的工作原理(已经不维护了) 在显示图片的时候,它会先在内存中查找;如果没有,就去本地查找;如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地。 基于这个原理,我们可以在每次退出一个页面的时候,把ImageLoader 内存中的缓存全都清除,这样就 阅读全文
posted @ 2016-11-14 20:05 qkeyar 阅读(216) 评论(0) 推荐(0)
 
摘要: 图片缓存技术:在很多情况下,(比如使用ListView, GridView 或者 ViewPager 这样的组件), 屏幕上显示的图片可以通过滑动屏幕等事件不断地增加,最终导致OOM。这个时候,使用内存缓存技术可以很好的解决这个问题,它可以让组件快速地重新加载和处理图片。下面我们就来看一看如何使用内 阅读全文
posted @ 2016-11-14 20:04 qkeyar 阅读(132) 评论(0) 推荐(0)
 
摘要: AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。 Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Uni 阅读全文
posted @ 2016-11-14 20:01 qkeyar 阅读(225) 评论(0) 推荐(0)
 
摘要: 主要有四大模块: DbUtils模块: android中的orm(对象关系映射)框架,一行代码就可以进行增删改查; 支持事务,默认关闭; 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等; 支持绑定外键,保存实体时外键关联实体自动保存或更新; 自动加载外键关联实体 阅读全文
posted @ 2016-11-14 19:56 qkeyar 阅读(125) 评论(0) 推荐(0)
 
摘要: EventBus是一个事件发布和订阅的框架。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast 在Fragment,Activity,Service,线程之间传递消息。优点是开销小,代码更优雅。以及将发送者和接收者解耦。 阅读全文
posted @ 2016-11-14 19:55 qkeyar 阅读(137) 评论(0) 推荐(0)
 
摘要: 1. 两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。 "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符 阅读全文
posted @ 2016-11-14 19:52 qkeyar 阅读(200) 评论(0) 推荐(0)
 
摘要: MVC(Model_view_contraller)”模型_视图_控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。从右图可以 阅读全文
posted @ 2016-11-14 19:51 qkeyar 阅读(148) 评论(0) 推荐(0)
 
摘要: 首先判断instance是不是为null,如果为null,加锁初始化;如果不为null,直接返回instance。 该类的构造方法被private修饰,外部访问者只能通过getSingleton方法获得实例,而不能自己再创建实例,可以保证系统中只有一个实例。 通过一个线程安全的方法来得到一个实例,但 阅读全文
posted @ 2016-11-14 19:47 qkeyar 阅读(115) 评论(0) 推荐(0)
 
摘要: 面向对象具有封装性,继承性,多态性.封装隐蔽了对象内部不需要暴露的细节,使得内部细节的变动跟外界脱离,只依靠接口进行通信.封装性降低了编程的复杂性. 通过继承,使得新建一个类变得容易,一个类从派生类那里获得其非私有的方法和公用属性的繁琐工作交给了编译器. 而继承和实现接口和运行时的类型绑定机制所产生 阅读全文
posted @ 2016-11-14 19:44 qkeyar 阅读(141) 评论(0) 推荐(0)
 
摘要: 栈与堆都是Java用来在Ram中存放数据的地方。Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回 阅读全文
posted @ 2016-11-14 19:42 qkeyar 阅读(138) 评论(0) 推荐(0)
 
摘要: Android N主要在运行时和图形处理上做了更新。 运行时间上,Android N对编译器进行了优化,软件的运行时间提升了3-6倍。引入了一个全新的JIT编译器,使得App安装速度快了75%,编译代码的规模减少了50%。 图形处理方面,N加入了一个新的图形工具Vulkan,可以帮助游戏的视觉体验更 阅读全文
posted @ 2016-11-14 19:38 qkeyar 阅读(203) 评论(0) 推荐(0)
 
摘要: 1. Android签名机制及原理 Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名。给APK签名可以带来以下好处: 应用程序升级:若包名相同而签名不同,系统会拒绝安装新版应用。 应用程序模块化: 阅读全文
posted @ 2016-11-14 19:36 qkeyar 阅读(1331) 评论(0) 推荐(0)
 
摘要: Binder在Android系统中江湖地位非常之高。在Zygote孵化出system_server进程后,在system_server进程中出初始化支持整个Android framework的各种各样的Service,而这些Service从大的方向来划分,分为Java层Framework和Nativ 阅读全文
posted @ 2016-11-14 19:33 qkeyar 阅读(200) 评论(0) 推荐(0)
 
摘要: 我们使用Java开发android,在编译打包APK文件时,会经过以下流程 Dalvik是Google公司自己设计用于Android平台的Java虚拟机。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式 阅读全文
posted @ 2016-11-14 19:28 qkeyar 阅读(883) 评论(0) 推荐(0)
 
摘要: C/C++过于底层,开发者要花很多的经历对C/C++的语言研究清楚,例如C/C++的内存机制,如果稍不注意,就会忘了开启或者释放。而Java的GC会自动处理这些,省去了很多的时间让开发者专注于自己的业务。所以才会从C/C++的底层慢慢向上变成了JAVA的开发语言,该层通过JNI和核心运行库层进行交互 阅读全文
posted @ 2016-11-14 19:26 qkeyar 阅读(306) 评论(0) 推荐(0)
 
摘要: Android的四层架构分别为Linux2.6内核层,核心库层,应用框架层,应用层。Framework层为我们开发应用程序提供了非常多的API,满足我们业务上的需求。(Android是基于Linux内核的,因此属于软实时操作系统) 我们可以称Framework层才真正是Java语言实现的层,在这层里 阅读全文
posted @ 2016-11-14 19:25 qkeyar 阅读(143) 评论(0) 推荐(0)
 
摘要: Google 2015年 9月28日公告:为了Android开发商可以制作出更加复杂的app和游戏,Google Play游戏包体(APK)大小由原来的50MB提高到100MB。但是针对Android 3.2及以下版本(API 13或更低)的包体限制最高依然是50MB, 对于Android 4.0或 阅读全文
posted @ 2016-11-14 19:25 qkeyar 阅读(201) 评论(0) 推荐(0)
 
摘要: 1) 拒绝在 Bitmap 上浪费你的内存:只在需要显示的时候加载到内存里或者通过缩放原图来减小内存占用。 2) 使用优化后的数据容器:请使用 Andorid 框架中优化过的数据容器,例如 SparseArray,SparseBooleanArray 和 LongSparseArray。类似于 Ha 阅读全文
posted @ 2016-11-14 19:24 qkeyar 阅读(153) 评论(0) 推荐(0)
 
摘要: 6.1.1 Android的内存机制 Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空间;然而对象的释放是由垃圾回收器来完成的. 那么GC怎么能够确认某一个对象是不是已经被废弃了呢?Java采用 阅读全文
posted @ 2016-11-14 19:21 qkeyar 阅读(158) 评论(0) 推荐(0)
 
摘要: 热修复是在应用的App包发布到市场之后,出现了Bug,无需替换包来进行在线更新的一种技术,对用户是无感知的。目前广义上有两种方案可以实现代码的替换,一种是类的替换,基于Classloader;另一种是方法的替换,而这两种方式各有优缺点。 方法的替换 方法的替换 如图所示,方法的替换的原理如下:在An 阅读全文
posted @ 2016-11-14 19:09 qkeyar 阅读(330) 评论(0) 推荐(0)
 
摘要: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: 在运行时判定任意一个对象所属的类; 在运行时构造任意一个类的对 阅读全文
posted @ 2016-11-14 18:59 qkeyar 阅读(345) 评论(0) 推荐(0)
 
摘要: JNI开发流程主要分为以下6步: JNI是Java众多开发技术中的一门,意在利用本地代码,为Java程序提供 更高效,更灵活的拓展。 NDK是Google为Android进行本地开发而放出的一个本地开发工具, 包括Android的Native API、公共库以及编译工具, 注意,NDK需要Andro 阅读全文
posted @ 2016-11-14 18:55 qkeyar 阅读(196) 评论(0) 推荐(0)
 
摘要: 基本类型与引用类型、强引用和弱引用 Java中数据类型可分为两大类:引用类型(reference)和基本类型(primitive)。 1)基本类型有8种:boolean、char、byte、short、int、long、float、double。 它们都有相应的包装类,这些包装类都属于引用类型,它们 阅读全文
posted @ 2016-11-14 18:50 qkeyar 阅读(356) 评论(0) 推荐(0)
 
摘要: 1.数据的逻辑结构: 1)线性结构:(只有一个开始结点和一个终端结点) 2)非线性结构:(一个结点有多个前驱结点和后继结点) A: 集合:(元素之间的关系较为松散) B: 线性结构:(元素之间存在严格的一对一的关系) C: 树形结构:(元素之将存在严格的一对多关系) D: 网状结构: (元素之间存在 阅读全文
posted @ 2016-11-14 18:42 qkeyar 阅读(276) 评论(0) 推荐(0)
 
摘要: JAVA 中为什么String 是immutable的? 1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = "abc")已经在pool(其实是内存中的栈)中存在,则会返回已存在String的引用,相反,怎会创建一个新的Strin 阅读全文
posted @ 2016-11-14 18:33 qkeyar 阅读(118) 评论(0) 推荐(0)
 
摘要: 相信很多人都遇到过App 莫名其妙就崩溃的情况,尤其是一些配置很低的手机,重现场景就是在App 切换到后台,闲置了一段时间后再继续使用时,就会崩溃。导致上述崩溃发生的罪魁祸首就是全局变量。 在内存不足的时候,系统会回收一部分闲置的资源,由于App 被切换到后台,所以之前存放的全局变量很容易被回收,这 阅读全文
posted @ 2016-11-14 18:32 qkeyar 阅读(155) 评论(0) 推荐(0)
 
摘要: 1 ArrayAdapter 只可以简单的显示一行文本 2 SimpleAdapter 可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工,也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。 3 BaseAdapter 可以实现复杂的 阅读全文
posted @ 2016-11-14 18:30 qkeyar 阅读(314) 评论(0) 推荐(0)
 
摘要: Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件。Intent用于启动Activity, Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介。使用Intent启动组件的优势: Intent为组件的启动提供了一致的编程模型。 在某些 阅读全文
posted @ 2016-11-14 18:26 qkeyar 阅读(184) 评论(0) 推荐(0)
 
摘要: 在子线程(new Thread)需要修改UI时:二者的作用都是将你正在子线程的操作抛到UI线程上! View.post(Runnable) View.postDelayed(Runnable, long) Activity.runOnUiThread(Runnable) 在主线程中新建异步任务:Ha 阅读全文
posted @ 2016-11-14 14:17 qkeyar 阅读(203) 评论(0) 推荐(0)
 
摘要: 1基于TCP协议的Socket 服务器端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。Accept()方法在没有数据进行接收的处于堵塞状态。,一旦接收到数据,通过inputstream读取接收的数据。 客户端创建一个S 阅读全文
posted @ 2016-11-14 14:07 qkeyar 阅读(183) 评论(0) 推荐(0)
 
摘要: HTTP请求&响应:(常用的只有Post与Get,还有Head/put/delete/connect/options/trace) Get&Post(建议用post规范参数传递方式,并没有什么更优秀,只是大家都这样社会更和谐。) 网络请求中我们常用键值对来传输参数(少部分API用json来传递,毕竟 阅读全文
posted @ 2016-11-14 14:04 qkeyar 阅读(1069) 评论(0) 推荐(0)
 
摘要: 网络基础协议 TPC/IP协议是传输层协议,主要解决数据如何在网络中传输。 HTTP是应用层协议,主要解决如何包装数据。 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如 阅读全文
posted @ 2016-11-14 12:10 qkeyar 阅读(215) 评论(0) 推荐(0)
 
摘要: 由于Android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在Android SDK中提供了四种用于跨进程通讯的方式。这四种方式正好对应于Android系统中四种应用程序组件:Activity、Content Provider、Broadcast和 阅读全文
posted @ 2016-11-14 12:04 qkeyar 阅读(166) 评论(0) 推荐(0)
 
摘要: 调用WebService返回的数据或是解析HTTP协议(见5.1节)实现网络数据交互。 存储格式一般为XML或是JSON。本节主要讲解这两种类型的数据解析。 XML被设计用来结构化、存储以及传输信息。 JSON:JavaScript对象表示法(JavaScript Object Notation), 阅读全文
posted @ 2016-11-14 11:54 qkeyar 阅读(287) 评论(0) 推荐(0)
 
摘要: 1、使用嵌入式关系型SQLite数据库存储数据 轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只 阅读全文
posted @ 2016-11-14 11:43 qkeyar 阅读(1071) 评论(0) 推荐(0)
 
摘要: 1. 写文件 首先声明一个文件输出流,使用系统提供的openFileOutput来获取该输出流,获取输出流时需指明输出流对应的文件名称,以及该文件的使用模式.使用模式分为MODE_APPEND即向文件尾写入数据、MODE_PRIVATE即仅打开文件可写入数据、MODE_WORLD_READABLE所 阅读全文
posted @ 2016-11-14 11:33 qkeyar 阅读(190) 评论(0) 推荐(0)
 
摘要: SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中,路径为:/data/data/<package name>/shared_prefs。 只能在同一个包内使用,不能在不同的包之间使用 实现Sha 阅读全文
posted @ 2016-11-14 11:29 qkeyar 阅读(198) 评论(0) 推荐(0)
 
摘要: ListView的工作原理如下: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount(),根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘 阅读全文
posted @ 2016-11-14 10:48 qkeyar 阅读(129) 评论(0) 推荐(0)
 
摘要: 2.4.1 Android抽象布局 在布局优化中,Androi的官方提到了这三种布局<include />、<merge />、<ViewStub /> 1、布局重用<include /> :该标签能够重用布局文件 1) 签必须使用单独的layout属性:<include layout="@layo 阅读全文
posted @ 2016-11-14 10:32 qkeyar 阅读(142) 评论(0) 推荐(0)