- 博客(220)
- 资源 (2)
- 收藏
- 关注
原创 关于编程中Context的理解
前言在编程的过程中,经常看到别人的源码中使用Context。经过一段时间的实践,谈谈个人对其的理解。正文是什么Context 指做一件事情的背景/环境/上下文/所需要的必要的数据AppContext 应用上下文,包含整个App运行期间必要的数据UserContext 用户上下文,包含一个User的上下文数据一个经典的Context例子:在一个操作系统中,包含多个进程,每个进程包含多个线程
2017-03-05 23:11:41 9458 1
原创 关于Android Matrix pre post 的理解
前言最近由于项目需要,接触到矩阵相关的知识较多,在实践后于此做知识记录,方便下次用到的时候可以快速的捡起来。正文理论上,矩阵是按照长方形阵列排列的复数或实数集合实际上,从源码看Matrix是用于坐标变换的3x3的矩阵【本文讨论的是graphics包下的矩阵,非opengl包下的矩阵】单个Matrix对象在Java层保留一个Native层对象的指针,在Native堆上进行实际内存分配、使用、回收
2017-01-30 00:28:42 1018
原创 Android Glide GifDrawable 模块源码解析
背景项目有个需求:对GIF动图实时添加文字。结合之前FollowMe景区导游助手项目中做过图片添加水印,MovieMaker项目中多张图片合成一段具有多种切换效果视频的经验,预测需要对GIF文件的数据进行解码,合成处理,编码输出合成文件。 项目基于Glide库实现GIF图片的显示,因此需要搞清楚GIF文件的数据是怎么显示到ImageView模块。本文记录分析GifDrawable模块的原理的过程
2017-01-09 00:31:44 4211 2
原创 Android 从本地和服务器拉取数据显示
需求分析在做GankIO客户端App时,有这样一种需求:类似微信消息列表界面,每次进入该界面时,都会先显示本地的数据,同时向服务器拉取最新的数据,减少用户等待数据的时间,以增强用户体验。概要设计我已经使用RxJava中的merge操作符实现该需求。现在如果不用RxJava框架,这个怎么实现?如何封装一个好用的模块给上层使用?这里需要同时在本地、服务器拉取数据,而且两件事情都做完后,整个事情才做完,
2016-12-11 16:55:05 2204
原创 JVM 字符编解码 UTF-8 UTF-16
背景关于字符编码问题,印象深刻的有两次:JNI层获取JVM中Emoji表情出错,上层看到4个字节,到JNI层拿出来成了6个字节面试中一道笔试题byte[] a = new byte[]{(byte) 0xc6, (byte) 0xd0};String s = new String(a);byte[] b = s.getBytes();问:最后a和b的内容是否相等?这里分析下笔试中的题目。
2016-12-10 21:21:59 3998
原创 java 嵌套类
Java编程语言允许开发者在一个类的内部定义另一个类。这样的类称为嵌套类,如:class OuterClass { ... class NestedClass { ... }}术语:嵌套类分为两种:static和非static。声明为static的嵌套类又称为静态嵌套类。没有声明为static的嵌套类称为内部类。 class OuterClass {
2015-03-18 16:48:14 642
原创 Handler和Looper是怎样绑定到一起的?
我们创建一个Handler一般方式是: private final Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { int what = msg.what; switch (what) { case MSG_START_MAIN
2014-12-26 16:04:51 2621 1
原创 Android ImageView和TextView居中
效果图:布局XML文件:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation
2014-12-15 23:37:24 8580
原创 java接口不能声明为synchronized
/** * 任务完成 * @param task */ public synchronized void onTaskFinished(DownloadTask task);
2014-11-10 10:47:41 4337
原创 Android Messenger 分析
/** * Reference to a Handler, which others can use to send messages to it. * This allows for the implementation of message-based communication across * processes, by creating a Messenger pointing t
2014-11-07 17:03:34 4683
原创 Android 多点触摸输入
@Override public boolean onTouchEvent(MotionEvent event) { int numPoints = event.getPointerCount(); for (int i = 0; i < numPoints; i++) { int x = (int) event.getX(i); int y = (int) event.ge
2014-11-07 09:20:50 1057
原创 Android ListView 局部刷新
private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { int what = msg.what; switch (what) { case CMD_UPDATE_TASK: int index = msg.arg1; Downl
2014-10-23 09:23:26 8300 2
原创 链表是否有环
Node * isLoop(Node *head){ if (head==NULL||head->nxt==head) { return head; } Node *p=head; Node *q=head; while (p!=NULL&&p->nxt!=NULL) { p=p->nxt->nxt; q=q->nxt; if (p==q) { return
2014-10-18 11:30:24 524
原创 C格式化输入/输出
int a,b,c; printf("input a,b,c/n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c);
2014-10-18 10:26:04 515
原创 递归创建链表
Node *create(){ int input=0; scanf("%d",&input); if (input!=-1) { Node *node=new Node(); node->v=input; node->nxt=create(); return node; } return NULL;}
2014-10-18 10:25:48 2160
原创 二分查找
int binarySearch(int *data,int low,int high,int value){ if (data==NULL||lowhigh) { return -1; } while (low<=high) { int mid=(low+high)>>1; if (data[mid]==value) { return mid; } el
2014-10-18 09:56:37 451
原创 java 线程停止的方法
1.设置flag,死循环中检测flag是否为false2.interrupt方法 public static Object lock=new Object(); public static void main(String[] args) { Thread thread=new Thread(){ public void run() { synchronized (lo
2014-10-16 15:23:08 800
原创 java 中线程执行顺序控制
Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("t1"); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() {
2014-10-16 14:21:06 16279 3
原创 快速排序
// DataStructure.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "stdlib.h"void quickSort(int *list,int low,int high){ if(low>=high) return ; int i=low; int j=high; int key=list[low]; w
2014-10-15 09:25:06 475
原创 滑动窗口的最大值
#include #include using namespace std;vector maxInWindow(const vector& num,int size){ vector maxInWindow; if (num.size()>=size&&size>=1) { deque index; for (int i = 0; i < size; i++) {
2014-10-14 17:55:13 1243
算符优先分析法 求FVT,LVT
2011-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人