自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PhoneWindow & Activity

Activity的UI的层次结构DecorView 是什么?DecorView是ViewTree最顶层的View。DecorView与PhoneWindow的关系Activity的UI结构对照一个简单的Activity:继承自ActivityUI结构对照图Activity的UI 组建

2016-12-28 20:41:03 543

原创 View的绘制

将View添加到WindowManagerService的过程1 : ActivityThread.handleResumeActivity从上面可知,WindowManager是通过Activity的getWindowManager获取到的更进一步,发现WindowManager是在attach的时候被赋值的。mWindowManager又

2016-12-28 17:40:54 437

原创 Zygote & System Server & app

Zygote:作用:Zygote负责fork其他的Android进程:所有的应用程序进程 ,SystemServer。关于Zygote:是安卓运行的第一个Dalvik虚拟机进程。/System/bin/app_process 是Zygote对应的进程。SystemServer 和 Zygote分属android操作系统不同Davik虚拟机上运行的不同进程。app_p

2016-12-23 17:53:30 976 1

原创 ViewStub的实现

一个例子点击按钮前点击按钮后UI布局文件activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:la

2016-12-12 21:17:16 420

原创 Android app 优化

一、内存避免内存泄漏内存泄漏的常见情况不恰当的static引用。内部类引起的外部类泄漏内部类AsyncTask、Handler、Runnable持有context对象:是否可以修改为静态内部类?在Activity onDestroy的时候,是否可以remove task,remove callback?是否可以使用Application 的con

2016-12-12 16:30:55 467

原创 对二维数据的一种遍历

代码 public static void solve(String[][] datas, int rows, int cols, int offset) { boolean isReturn = isEnd(rows, cols, offset); if (isReturn) { return; } int row_index = offset; int

2016-12-08 11:01:41 367

原创 选择排序

代码public class SelectedSort { public static void main(String[] args) { int[] datas = {8, 3, 7, 1, 5, 6, 4, 9, 2 }; logs("old : ", datas); selectedSort(datas); logs("new : ", datas); }

2016-11-30 16:24:37 231

原创 冒泡排序

代码实现public class BubbleSort { public static void main(String[] args) { int[] datas = { 8, 3, 7, 1, 5, 6, 4, 9, 2 }; logs("old : ", datas); bubbleSort(datas); logs("new : ", datas); } p

2016-11-30 15:56:48 299

原创 父类的静态方法能否被子类重写

父类的静态方法不能被子类重写代码Animpublic class Anim { public static void test() { System.out.println("Anim test static method!"); }}Dogpublic class Dog extends Anim { public static void test

2016-11-29 21:42:12 2974

原创 检查单链表中是否有环

单链表判断是否有环判断原理用两个指针,从头节点开始遍历,一个指针a每次走1步,一个指针b每次都2步。如果有环,两个指针相遇前b位于a后一位时,那么a,b指针下次相遇。b位于a后两位时,那么a,b指针下下次即将相遇。算法实现创建链表 public static Node createList(int max) { boolean

2016-11-27 12:42:40 364

原创 四种线程池

newCachedThreadPool用法代码import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TestMain { public static void main(String[] args) { ExecutorServic

2016-11-22 15:11:14 2116

原创 Aidl实现的一个例子

AIDL 与 Messenger的异同对于跨进程的调用AIDL返回值是同步的,而Messenger是异步的。Aidl调用service的方法,会等待直到service中的方法执行完毕。AIDL在Service中会针对每个请求开启新线程来执行客户端的调用。而Messenger会把消息放在主线程的队列里。AIDL的实现,要注意线程安全的实现oneway

2016-11-20 18:54:27 2939

原创 工作线程弹toast

创建Handler的线程必须有looper。 public Handler(Callback callback, boolean async) { if (FIND_POTENTIAL_LEAKS) { final Class klass = getClass(); if ((klass.isAnonymousClass

2016-11-19 01:10:19 434

原创 HandlerThread的实现

主要源码public class HandlerThread extends Thread { Looper mLooper; ...省略代码 @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synch

2016-11-18 23:41:29 557

原创 Service的学习

Service可以在后台长时间运行操作而不提供用户界面的组件。组件可以启动服务,也可以绑定到服务。服务可以处理网络事务,播放音乐,io操作,ContentProvider交互 等耗时操作都在后台执行。服务在其托管进程的主线程中执行。(即不创建自己的线程,也不在单独的进程中执行(除非另外指定))耗时操作应该在服务内创建新线程来工作。使用Service

2016-11-18 22:01:38 365

原创 IntentService的实现

简介简化了启动服务的实现。对于每个startService请求,均使用工作线程执行任务,且每次处理一个请求。工作线程会执行onHandleIntent , service会自动stop。当service启动后,所有的请求都会在同一个工作线程中执行,单同一时间,只有一个请求在执行。源码/** * IntentService is a base class f

2016-11-17 20:37:29 376

原创 学习BlockCanary的实现

Android如何获取主线程堆栈信息Thread.getStackTrace()方法。如何在其他线程获取主线程引用 : Looper.getMainLooper().getThread();如何Cpu使用情况获取Cpu总数据,来自CpuSampler的doSample方法 @Override protected void doSample()

2016-11-15 00:33:29 1522

原创 简单工厂

类图代码Productpublic interface Product { public void doSomething();}ProductApublic class ProductA implements Product { @Override public void doSomething() { Syste

2016-11-13 15:07:34 280

原创 策略模式

类图注意如果在一个系统里面有许多类,它们的区别只在于它们的行为。使用switch case 或 其他 条件判断语句的地方一个系统需要动态的在几个算法中选择其一使用哪个策略是由外部环境决定的代码实现Strategypublic interface Strategy { public void travelStrate

2016-11-13 13:53:02 302

原创 重构-读书与实践的体验

本文好多知识来源于《重构》为何重构:改进设计易于理解避免补丁循环更快的编写新代码何时重构:经常,随时添加功能时修改bug时代码review之后何时不重构:代码太混乱,不如重写项目的最后期限重构原则小步进行重构不改变代码的外观行为重构时清楚自己是在重构,写新代码时,清楚自己在写新代码

2016-11-12 23:54:36 448

原创 Builder模式

Builder模式的UML图类图时序图Builder模式的角色Director :调用具体的Builder去构建对象Builder : 抽象接口,规范产品对象的各个组成部分的构建ConcreteBuilder : 实现builder类抽象接口,建造过程完成后,返回产品Product : 建造的产品对象B

2016-11-12 22:54:08 253

原创 单例模式

单例模式的条件最多只有一个实例实例的生命周期足够长:如果临时使用一次,使用new就可以单例模式的类图单例模式的四种实现饿汉式public class Singleton1 { private static final Singleton1 sInstance = new Singleton1(); private Singleton1

2016-11-10 16:39:46 231

翻译 Android Dev 进程与线程 学习

进程和线程进程概要当某个应用组件启动且此应用没有运行任何其他组件时,系统会使用单个线程为应用启动新的Linux进程默认情况,同一应用的所有组件在同一个进程和线程中运行如果某个应用组件启动,并且该应用已存在进程,则该组件在已经存在的进程中启动,并使用同一个已经存在的进程开发者可以设置应用的组件在不同的进程中运行标示进程如

2016-11-10 15:36:33 346

原创 ComponentCallbacks2

ComponentCallbacks2 相关类图关于ComponentCallback2是一个细粒度的内存回收管理回调。Application、Activity、Service、ContentProvider、Fragment实现了ComponentCallback2接口开发者应该实现onTrimMemory(int)方法,细粒度release 内存,参数可以体现不

2016-11-10 01:02:17 2482

原创 Java ThreadLocal 类

一个例子(参考自张孝祥老师的视频)代码package com.jue.test_thread_local;import java.util.Random;public class TestMain { private static ThreadLocal tl = new ThreadLocal(); public static void main(String[]

2016-11-08 13:18:59 319

原创 Android Looper 类

Looper类的重要字段字段汇总 static final ThreadLocal sThreadLocal = new ThreadLocal(); private static Looper sMainLooper; // guarded by Looper.class final MessageQueue mQueue; final Th

2016-11-07 22:56:24 983

原创 面向对象的原则(Solid + L)

面向对象的原则(Solid + L)单一职责SRP : Single Responsibility Principle类:只代表一种角色接口:只代表一类抽象方法:只做一件事字读:只代表一种含义开闭原则OCP : Open Close Principle功能的添加通过扩展实现,而不是修改代码类修改的唯一原因是因为错误策略

2016-11-07 11:33:45 284

原创 Java基础,外部类能够访问内部类的私有静态字段。

外部类能够访问内部类的私有静态字段。public class Singleton { private Singleton() { } public static Singleton getInstance() { return SingletonHolder.sInstance; } private static clas

2016-11-07 11:05:57 1341

原创 switch case 语句

switch case 语句 支持 byte, char , int, enum, 1.7及之后开始支持String。switch case 语句不支持  longpublic class TestMain { public static void main(String[] args) { byte b = 1; switch(b) { case 1:

2016-10-21 21:52:19 564

原创 Object 与 String细节

==基本类型== ,表示字面值是否相等引用类型==,也表示值是否相等,但是表示的 “对象的地址”,也就是左右两侧是否是一个对象。Java.lang.Object类当打印引用时,实际上会打印引用所指对象的toString方法。推荐所有的class都override toString方法。系统默认返回的 类的全称 + "@" + 地址的16进制表

2016-08-03 17:40:19 276

原创 Groovy学习笔记 一 、搭建

本文参考自Venkat Subramaniam所著《Groovy程序设计》Groovy是什么英文本意:优秀的,出色的。Groovy语言特点:轻量级限制较少动态面向对象运行在JVM上遵循Java语义通过编译为Java字节码,可以扩充Java Api 和 类库。部署要求:Java 1.5及更高版本的Java环境。一个单独的Groovy

2016-06-28 16:02:26 360

原创 Java details-java虚拟机的两种线程

在Java虚拟机内部有两种线程:守护线程虚拟机自己使用。执行垃圾收集任务的线程。只要有任何非守护线程存在,那么程序也在继续运行。非守护线程java程序的初始线程:有main的。普通的java程序:如果main中没有调用其他线程,执行完程序之后就终止了该程序中唯一的非守护线程,导致虚拟机实例退出。

2014-03-14 23:52:06 610

原创 Working Practice-不同前置条件的delay,有可能造成delay时间的叠加

工作有时候是有依赖关系的,就象有向图一样,不同的前置条件的delay,有可能造成delay时间的累加。最近在开发的过程中,UI设计,接口,与其他项目组的协作过程中都有不同程度的delay。最后导致项目后期比较紧张。

2014-03-06 00:13:57 533

原创 Code Fragment-使用disk cache存储图片

可以使用disk cache存储一些图片,这些图片通常有下列特征:1.经常重复使用,2.个数比较大。尤其对于一段时间不会改变的图片,很有价值。这是一种通过空间还换时间的方法(还节省了流量,提高了用户的响应时间)。

2014-03-03 23:41:47 671

原创 Code Fragment-访问大量数据使用接口

请求大量数据的时候,可以请求压缩格式,返回数据传输会更快,但是压缩会有一定的损耗,当数据量比较小时,可能就会受可能会有损耗。

2014-03-02 23:05:02 606

原创 Working Practice-对于有疑问的问题多一点分析

最近的项目存在两个问题,一个不太在意:问题一:图片下载使用了memory cache和disk cache,但是每次加载都很慢。问题二:退出我开发的模块以后,会有短暂的无响应问题。关于这两个问题,本已经发现,但是没有在意,后来查明:退出此模块的时候,会清空memory cache + disk cache。清空memory cache是正常的,但是disk cach

2014-03-02 00:41:01 744

原创 Working Practice-中间方案

对于一些领导提出的有点为难的需求,可以采用中间方案:完成部分领导要求的按照合乎的需求完成大部分方案。再晓之以理,说服领导。

2014-03-01 00:32:17 547

原创 Working Practice-为意外情况做准备

今天有2件事情,比较意外:明天要有一个新的小版本提测。(下午老总通知的)下周大版本要提测。这种两件事完全与以前了解的计划的不符,如果不能抗拒这种问题,那如何减少这种问题的冲击:必要的事情,提前沟通确定好。开始时保持一种紧张的节奏。需要多人协作的事情,提前规划好。协作的事情,分批给,尽快开发,尽快发现问题。对未能按时交付协作任务的同事,进行跟踪,督促。

2014-02-28 00:39:12 563

原创 Working Practice-把任务通过邮件发给自己

最近发现了一种非常有趣的工作方式:总结当天的任务,分列成条通过邮件发送给自己。每次想到一个新的任务,添加到邮件。title+1简要概述。每完成一个任务,添加到邮件,title-1发送给自己。

2014-02-25 23:25:42 720

原创 Working Practice-使用官方的实现

今天跟一个team leader一同讨论了创建快捷方式的问题,我的建议是使用较为灵活的方法,来完成功能。但是另一个team leader更期望使用官方提供的方式去创建快捷方式。自己思考后觉得挺有道理。官方的通常代表一种通用的,合法的调用方式。这种通用的,合法的方式具有普遍适用性,兼容性较好。

2014-02-24 22:39:55 600

空空如也

空空如也

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

TA关注的人

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