自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 一种根据ImageView的大小缩放Bitmap的方法

Bitmap是Android应用程序引起OOM的罪魁祸首之一,当我们从网络上下载图片的时候无法知道网络图片的准确大小,所以为了节约内存,一般会在服务器上缓存 一个缩略图,提升下载速度。除此之外,我们还可以在本地显示图片前将图片进行压缩,使其完全符合imageview的大小,这样可以最大限度避免内存浪费。本文基本思路:(1)获取ImageView的宽和高。(2)使...

2016-09-17 19:27:00 435

转载 Volley框架使用及源码解析

1. Volley特点(1) 特别适合数据量小,通信频繁的网络操作。(2) 扩展性强。Volley 中大多是基于接口的设计,可根据需要自行定制。(3) 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理, 缓存机制的支持等。并支持重试及优先级定义。(4) 提供简便的图片加载工具GitHub地址:...

2016-07-16 10:23:00 152

转载 Android事件分发机制——Touch事件

1. 简介 先来看一个表:Touch事件相关方法功能ActivityViewGroupViewpublic boolean dispatchTouchEvent(MotionEvent ev)事件分发YesYesYespub...

2016-03-20 16:29:00 158

转载 Activity启动(4)----从进程角度看

1.AMS简介 在Android中,一个应用运行时为一个进程,系统对应用的管理是通过一个专门的系统级service——ActivityManagerService,即AMS。 系统通过AMS来管理应用进程的生命周期,也包括应用的activity和service的生命周期。 AMS是一个独立的进程,它与应用进程之间需要通过跨进程交互。2.AMS与应用的跨进程交互 ...

2016-02-26 16:55:00 136

转载 Activity启动(3)----Task,Activity,Process的管理

ActivityManagerService管理着Activity,Task和应用程序进程。三者在AMS中的表现形式分别为:ActivityRecord,TaskRecord,ProcessRecord。这三者的关系如下图所示:从图中可以看出,AMS是按层次关系进行管理所有的Activity的。(1) ActivityStackSupervisor的成员mStacks是A...

2016-02-23 09:57:00 318

转载 Activity启动(2)----setView之后(View的绘制过程)

上一篇文章最后结束在ViewRootImpl.setView()函数,这个函数之后发生了什么事情,我们接着分析。1. ViewRootImpl简介ViewRootImpl作为视图层次中的顶层,实现了View和WindowManager之间需要的协议,与SystemServer进程的WindowManagerService有交互,具体实现了WindowManagerGloba...

2016-01-24 18:20:00 203

转载 Activity启动(1)----流程

Activity启动过程中做了哪些事情?下面的时序图展示里启动过程中函数的调用过程, 从图中可以知道大概流程。在介绍细节的时候是从上往下函数调用过程介绍的,如果不知道某个函数是在哪里被谁调用的,可以回过头来看下时序图。下面是对一些细节进行介绍。1. 在Android中有两种操作会引发Activity的启动,一种用户点击Launcher的应用程序图标时,Launcher...

2016-01-16 17:29:00 138

转载 Android APP启动速度性能优化

1。统计启动耗时分布的方法1.1 通过log统计函数运行耗时 在需要检测的代码的前后调用System.currentTimeMillis();获取时间然后通过log输出时间。 通过这种方式,可以定位到哪个函数,甚至是哪句语句执行得慢。1.2 通过log打印一个activity从启动到第一次显示的时间 使用命令:adb logcat |grep “D...

2016-01-12 16:37:00 169

转载 零星记录(一)

1. 多个PendingIntent时如何区分不同的Intent?调用下面两个函数可以获得对应的PendingIntent,如果requestCode相同,获得的PendingIntent里的intent总是最后一个。所以要想区分,需要指定不同的requestCode.public static PendingIntent getActivity(Context ontext, ...

2015-06-25 09:49:00 80

转载 Android基本动画小结

Android主要提供了3类动画,第一类是Tween动画(也称为补间动画),就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。第二类就是 Frame动画,即顺序的播放事先做好的图像。第三类是属性动画,这种动画会改变对象的实际属性。1. Tween动画(补间动画) 补间动画是一种通过指定View对象开始和结束的状态,然后通过系统自动生成需要...

2015-04-25 16:13:00 141

转载 Android锁屏界面控制音乐播放

目前,在锁屏界面控制音乐播放有两种常用方式。第一种方式:原生Android系统及自带音乐播放器。锁屏界面端: 原生Android中,锁屏界面相关的UI由KeyguardHostView提供,KeyguardHostView向KeyguardUpdateMonitor注册一个类型为 KeyguardUpdateMonitorCallback的回调, KeyguardUpd...

2015-04-16 18:08:00 1480

转载 Binder框架(2)

通过MediaServer详细解析Binder内部实现细节。1. MediaServer的入口函数int main(int argc, char** argv) { sp<ProcessState> proc(ProcessState::self()); //获得一个ProcessState实例 // MediaServe...

2015-03-19 09:45:00 104

转载 Binder框架(1)

Binder工作在linux层,是一个不需要硬件的驱动,从线程角度看,Binder代码运行在内核态,客户端程序使用Binder是通过系统调用完成的。 Binder是一种整体架构,包含服务端接口,Binder驱动,客户端接口三个模块。1. 服务端 一个Binder服务端实际上就是一个Binder类的对象,该对象一旦创建,内部就启动一个隐藏线程。该线程会接收B...

2015-03-16 19:16:00 132

转载 Looper和Handler类分析

一. Looper1. 如何使用Looper?(1) 定义一个LooperThread.class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); // 调用prepare(); ...

2015-03-14 15:59:00 101

转载 RefBase, sp和wp (3)

RefBase提供了一个函数: extendObjectLifetime(int32_t mode); 用于在构造函数中设置mFlags的值. 以及定义了一个枚举: enum { OBJECT_LIFETIME_WEAK = 0x0001; // 二进制为B01 OBJECT_LIFETIME_FO...

2015-03-14 14:17:00 119

转载 RefBase, sp和wp (2)

1. 通过wp创建sp的例子, 如: int main() { A* pA = new A(); wp<A> wpA(pA); // 弱引用计数为1, 强引用计数为初始值0x1000000. sp<A> spA = wpA.promote();...

2015-03-14 13:41:00 110

转载 RefBase, sp和wp (1)

RefBase是Android中所有对象的始祖,类似于MFC中的CObject,Java中的Object对象。在Android中,RefBase结合sp(strong pointer)和wp(weak pointer),实现来一套通过引用计数的方法来控制对象生命周期的机制。sp和wp存在的目的就是实现对new出来的内存自动回收。1. RefBase和影子对象 Re...

2015-03-13 14:53:00 220

转载 《深入理解Android》学习笔记(三) ——— zygote

1. zygote 本身是一个Native的应用程序,与驱动,内核无关,由init进程根据init.rc的配置项创建起来的。2. zygote 是创建java世界的盘古,创建java世界的步骤: (1) 创建AppRuntime对象,并调用它的start。此后的活动由AppRuntime控制。 (2) 调用startVm创建Java虚拟机,然后调用startReg...

2015-03-06 14:22:00 111

转载 《深入理解Android》学习笔记(二) ——— init

1. init :是Android系统中用户空间的第一个进程。有以下两个重要职责:负责创建系统中的几个关键进程,如zygote.提供一个property service(属性服务)来管理Android系统的属性。2. init工作流程: (1) 解析两个配置文件:与系统相关的配置文件init.rc,与机器硬件平台相关的配置文件init.hardware.rc....

2015-03-06 10:01:00 108

转载 《深入理解Android》学习笔记(一) ——— 初识JNI

1. JNI, Java Native Interface,即 Java本地调用。 作用:JNI层作为连接Java世界与Native世界的桥梁,使Java程序中函数可以调用Native(C/C++)编写的函数,Native(C/C++)程序中可以调用Java的函数。2. Java要调用Native函数,需要完成以下两项工作: (1)加载对应的JNI动态库。通常在J...

2015-03-05 09:44:00 113

转载 为Fragment增加新的生命周期,并实现管理

1. 背景知识 ViewPager+Fragment实现滑动标签页时,默认情况下,Fragment的生命周期是由FragmentPagerAdapter和Activity共同管理的。(1) Activity维持在onResume状态时,Fragment的生命周期主要由FragmentPagerAdapter进行管理。进行了预加载的Fragment会处于onResume状态(即...

2014-11-27 16:12:00 109

空空如也

空空如也

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

TA关注的人

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