自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (8)
  • 收藏
  • 关注

转载 dex2jar 反编译apk 报错 error.zip 的解决

dex2jar 反编译apk 有如下报错,完整报错如图片:Detail Error Information in File .\GtsSettingsTestCases-classes-error.zipPlease report this file tohttp://code.google.com/p/dex2jar/issues/entryif possible.打开 ...

2019-09-18 12:38:07 12876 12

原创 View 的绘制过程

1.概述本文是 Android 开发艺术探索第4章,及如下两篇博客的学习笔记 http://www.cnblogs.com/yongdaimi/p/6164686.html http://blog.csdn.net/a396901990/article/details/36475213 http://blog.csdn.net/a396901990/article/details/381296

2017-05-14 17:01:55 628

原创 Android InputMethod 源码分析,显示输入法流程

1.简介本文基于 android N,借鉴 http://blog.csdn.net/huangyabin001/article/details/28434989 ,记录一下输入法显示的流程,相当于一篇读书笔记,方便记忆与学习大体流程如下:InputMethodManagerService(下文也称IMMS)负责管理系统的所有输入法,包括输入法service(InputMethodServic

2017-05-06 19:18:47 17717 3

原创 3.1 View

1. 基础知识1.1. 什么是ViewView 是 Android 中所有控件的积累,是界面层对控件的一种抽象,代表一个控件。 ViewGroup 继承自 View,是控件组,ViewGroup可以包含很多子View,ViewGroup又是 View的子类,形成的View的树结构。1.2. View的位置参数width = right - leftheight = bottom - top//

2017-03-29 15:08:27 407

原创 ScrollView嵌套TextView文字上部截断下部有空隙

1 问题:ScrollView嵌套TextView,TextView中文字很多时,会出现文字上部被截断几行,控件底部又出现了一块空白1.1 问题布局<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@

2017-03-12 14:23:45 1200

原创 7.3 位运算

1.位运算&:与 如果 x = 1并且 y = 1,那么(x & y) = 1;否则 (x & y)= 0|:或 如果 x = 1 或者 y = 1,那么 (x | y)= 1;否则 (x | y)= 0~:取反 把0变成1,1变成0^:异或 如果 x == y,那么 (x ^ y)= 0;否则(x ^ y)= 1<<:左移 x << 1 等价于 x *= 2,左移后 右边补0

2017-03-05 18:02:17 596

原创 7.2 文件

1.用 < 和 > 做重定向file.c#include<stdio.h>int main(int argc, const char *argv){ int num; int i1 = scanf("%i", &num); int i2 = printf("%d\n", num); printf("%d:%d\n", i1, i2); return 0;}

2017-03-05 16:37:58 352

原创 7.1 printf与scanf

1.格式化的输入输出printf 返回输出的字符数 %[flags][width][.prec][hlL]typescanf 返回读入的项目数 %[flag]type 在要求严格的程序中,应该判断每次调用scanf或printf的返回值,从而了解程序运行中是否存在问题#include<stdio.h>int main(int argc, const char *argv){

2017-03-04 16:52:50 354

原创 6.3 大程序结构

1.多个 .c文件,如何编译main()里的代码太长,适合分成几个函数一个源代码文件太长,适合分成几个文件两个独立的源代码文件 不能编译成一个可执行程序之前我们写的代码,是放在一个.c文件中,如果main写在一个.c文件中,max()写在一个.c文件中呢?2.项目新建项目: Devcpp中 文件 —— 新建 —— 项目 —— Console Application对于项目,Devcpp

2017-03-04 14:49:48 356

原创 6.2 宏

1.编译预处理指令以#开头的是编译预处理指令它们不是C语言的成分,但是C语言程序离不开它们用#define来定义一个宏#include<stdio.h>//const double PI = 3.1415926;#define PI 3.1415926int main(int argc, const char *argv){ printf("%f\n", 2*PI*3.0);

2017-02-28 16:27:30 337

原创 6.1 全局变量

1.全局变量定义在函数外面的变量全部变量有 全局的生存期和作用域 它们与任何函数都无关在任何函数内部都可以使用它们2.全局变量初始化没有做初始化的全局变量会得到0值 指针会得到NULL值只能用编译时刻已知的值来初始化全局变量它们的初始化发生在main函数之前#include<stdio.h>int f(void);int gAll;// int gAll = f(); //[E

2017-02-28 16:20:03 491

原创 5.2 链表

1.可变数组的缺陷问题:当长度不够时 申请新的内存是一个简洁的方式,但是 拷贝数据耗时,在内存限制下 可能会拷贝失败(比如内存剩下4字节,原数组4字节,新的数据2字节。如果重新申请一段内存做拷贝就会失败) 解决:我们希望把各数组连接起来,不是拷贝链表中每个元素 需要知道 值 和 下一个元素的地址,我们知道 链表的 头 head,就可以获取链表中的元素2.定义链表node.h#ifndef _NOD

2017-02-27 15:19:17 261

原创 5.1 自定义可变数组

1.array.h#ifndef _ARRAY_H_#define _ARRAY_H_typedef struct { int *array; int size;} Array;Array array_create(int init_size);void array_free(Array *a);int array_size(const Array *a);int* array_

2017-02-23 12:10:25 376

原创 4.3 结构类型——类型定义

1.自定义数据类型 typedeftypedef 用来声明一个已有的数据类型的新名字,比如:typedef int Length; // 使用Length 成为 int 的别名//用Length这个名字 代替 int 出现在定义变量和声明参数Length a,b,len;Length numbers[10];typedef声明新的类型的名字:新的名字是某种类型的别名改善了程序的可读性typ

2017-02-23 10:29:27 436

原创 4.2 结构类型——结构

1. 结构#include<stdio.h>int main(int argc, const char *argv){ struct date{ int month; int day; int year; }; struct date today; today.month = 02; today.day = 16;

2017-02-16 11:52:33 541

原创 4.1 结构类型——枚举

1.枚举枚举是一种用户定义的数据类型,关键字是 enum,语法是: enum 枚举类型名字{名字0, … , 名字n};枚举类型名字 通常并不真的使用,用的是 大括号里边的名字(它们是常量符号,类型是 int,值依次是 0 到 n-1)enum colors{red, yellow, green};创建了3个变量,red的值是0,yellow的值是1,green的值是2当需要一些可以排列起

2017-02-16 11:27:56 300

原创 3.2 字符串函数的实现

1. strlen需要引入 string.h 头文件#include <string.h>1.1 使用strlensize_t strlen(const char *s); 返回 s 的字符串长度(不包括结尾的 \0)#include<stdio.h>#include<string.h>int main(int argc,char const *argv[]){ char line[]

2017-02-15 16:46:42 403

原创 3.1 字符串操作

1. 单字符输入输出1.1 putcharint putchar(int c)向标准输出 写一个字符返回写了几个字符,EOF(-1)表示写失败1.2 getcharint getchar(void);从标准输入 读入一个字符出错返回EOF(-1)停止输入 Windows:Ctrl + ZUnix:Ctrl + D Ctrl + C 是退出运行的程序#include<stdio

2017-02-15 09:57:43 406

原创 2.2 指针的计算

1. 1 + 1 = 2?给一个指针 加 1,表示要让指针指向下一个变量 如果指针不是指向一片连续分配的空间,这种运算没有意义#include<stdio.h>int main(void){ // char 数组 char ac[] = {0, 1, 2, 3, 4, 5, 6}; char *p = ac; printf("p=%p\n", p); // p=

2017-02-15 09:53:16 353

原创 2.1 指针的使用

1.指针的使用1.1 交换两个变量的值#include<stdio.h>void swap(int *pa, int *pb); int main(){ int a = 5; int b = 6; swap(&a, &b); printf("a=%d,b=%d\n", a, b); // a=6,b=5 return 0;}void swap(int *pa,

2017-02-14 12:19:04 444

原创 1.4 类型转换和条件运算

1.自动类型转换1.1 计算时:当运算符两边 出现不一致的类型时,会自动转换成 较大的类型,大 指的是 能表达的数的范围更大char –> short –> int –> long –> long longint –> floag –> double1.2 输入输出时:对于 printf,任何小于int的类型 会被转换成 int; float 会被转换成 double但是scanf不会,

2017-02-11 22:09:47 381

原创 1.3 逻辑类型

1. bool引入 #include#include<stdio.h>#include<stdbool.h>int main(){ bool b = 6 > 5; bool t = false; printf("%d\n", b); // 1 printf("%d\n", t); // 0 t = 2; printf("%d\n", t); // 1

2017-02-11 16:02:32 563

原创 1.2浮点类型

1.浮点类型float: 字长:32,范围:±(1.20*10^-38 ~ 3.40*10^38), 0, ±inf, nan,有效数字:7输入(scanf):%f输出(printf):%f,%edouble: 字长:64,范围:±(2.2*10^-308 ~ 1.79*10^308),0, ±inf, nan,有效数字:7输入(scanf):%lf输出(printf):%f

2017-02-11 14:38:22 718

原创 1.1 整数类型

该系列是 浙江大学 翁恺 老师的 C语言程序设计进阶 的课程笔记1.占位大小#include<stdio.h>int main(){ printf("sizeof(char)=%d\n", sizeof(char)); printf("sizeof(short)=%d\n", sizeof(short)); printf("sizeof(int)=%d\n", sizeof(

2017-02-09 18:23:20 1230

原创 ListView源码分析

1.概述本文是阅读 http://www.cnblogs.com/qiengo/p/3628235.html http://blog.csdn.net/iispring/article/details/50967445 http://blog.csdn.net/guolin_blog/article/details/44996879 http://www.jianshu.com/p/9c6

2017-02-06 14:44:24 482

原创 19.进程同步与死锁——死锁处理

1.引出死锁再看生产者-消费者的信号量解法,之前的例子://用文件定义 共享缓冲区int fd = open("buffer.txt");write(fd, 0, sizeof(int));//写inwrite(fd, 0, sizeof(int));//写out//信号量的定义和初始化semaphore full = 0;//生产的产品的个数semaphore empty = BUFFE

2017-01-31 21:30:39 548

原创 18.进程同步与死锁——信号量的代码实现

1.生产者代码//伪代码Producer(item){ P(empty); ... V(full);}//sem.c 进入内核//信号量在内核中,包含 value 和 PCB,value的值能被多个进程看到typedef struct{ char name[20];// name是信号量的名字,比如empty int value; // value

2017-01-31 19:20:23 951 1

原创 17.进程同步与死锁——信号量临界区保护

1.温故知新通过对信号量的访问和修改,让进程有序推进 问题: empty值必须是正确的,如果empty错了,就不能有序推进了2.共同修改信号量引出的问题//生产者Producer(item){ P(empty);//生产者先判断 缓存区个数 empty是否满了,empty == 0,阻塞 ...}//生产者P1register = empty;register = reg

2017-01-31 09:51:45 1405

原创 16.进程同步与死锁——进程同步与信号量

1.进程合作:多进程共同完成一个任务1.1 司机与售票员// 司机while(true){ //等待售票员关门的信号 启动车辆; 正常运行; 到站停车;}//售票员while(true){ 关门; 售票; //等待司机到站停车的信号 开门;}1.2 打印机打印机按照打印队列执行打印,当打印队列中有 6个打印任务,2个进程同

2017-01-30 10:54:26 422

原创 15.CPU调度——schedule

1.Linux 0.11 的调度函数 schedulekernel/sched.c schedule() 的目的是找到下一个任务 next,切换到下一个任务/* * 'schedule()' is the scheduler function. This is GOOD CODE! There * probably won't be any reason to change this, as

2017-01-26 20:52:45 774

原创 14.CPU调度——CPU调度策略

1.CPU调度的直观想法线程1阻塞,线程2 3都处于就绪态,该执行哪个呢?需要有调度策略FIFO 先进先出,简单有效。比如:食堂Priority 任务短的先执行(怎么知道任务的执行时长)任务多了,优先级询问 会越来越长如果优先级高的任务 耗时很长怎么办?比如优先级高的用户需要填一个很长的表格2.面对诸多场景,如何设计调度算法?目的: 面对用户,目的是让用户满意面对进程:CPU调度

2017-01-26 20:46:24 2439

原创 13.线程的引出与实现

1.回顾程序开始执行,PC置初值,CPU就不断地 取指执行 顺序执行,CPU如果遇到 耗时的指令,就在等待,没有充分利用,引出了 任务切换1.1 栈实现跳转1.2 一个栈 + Yield 造成的混乱D执行完,回不到 2041.3 两个栈 + 两个用户TCB切换时,Yield找到 新的用户线程的TCB,找到新的用户栈,切换1.4 内核栈切换用户栈 关联着 内核栈,切换时,从用户栈 到 内核栈,到TC

2017-01-23 17:49:50 298

原创 12.线程的引出与实现——核心级线程实现实例

1.从进入内核开始——从某个中断开始main(){ // main先执行A,将B的开始地址压栈,即 A函数返回地址 是 B的开始地址 A(); B();}A(){ //进程由资源和执行序列组成,fork会创建资源和执行序列(线程) //fork 是 创建系统进程的调用,会引起中断,可能会引起 内核级线程 切换 fork();}fork:

2017-01-22 10:47:35 517 1

原创 11.线程的引出与实现——内核级线程

1.内核级线程用户级线程: 创建:创建 TCB、栈,关联TCB和栈。将PC指向自己的栈 切换:切换TCB,再切换栈进程切换:切换指令流(线程)、切换资源(内存管理) 进程要使用内存、硬件设备等,在内核中(用户态搞不定资源) 切换进程 就是 切换 内核级线程MMU(memory management unit):内存管理单元,有时称作分页内存管理单元。它是一种负责处理中央处理器的内存访问请求的

2017-01-18 10:33:27 659

原创 10.线程的引出与实现——用户级线程

1.线程的引入进程 = 资源 + 指令执行序列线程:一个资源 + 多个指令执行序列 资源(映射表)和指令分开线程中,一个映射表 对应 多个指令序列,会加快切换速度,切换指令需序列,只要改PC值就可以了 线程切换,是从一段程序,切换到 另一段程序2.多个执行序列 + 一个地址空间 的应用举例浏览器显示网页我们平时用的浏览器 打开一个网页时,都是 先 加载文字,过一会,加载了 图片,最后 出现

2017-01-16 18:17:12 582

原创 9.多进程图像的引出——多进程图像

1. 什么是多进程图像?如何使用CPU? 让程序执行起来如何充分利用CPU? 启动多个程序,交替执行多进程图像:多个进程使用CPU的图像操作系统 把这些 启动了的程序(进程)用PCB记录好,再按照合理的次序推进(分配资源、进行调度) PCB:Process Control Block,用来记录进程信息的 数据结构2.多进程如何组织?有程序在执行;有一些进程在等待执行,放在就绪队

2017-01-13 17:39:19 970

原创 8.多进程图像的引出——CPU管理的直观想法

1. CPU工作原理CPU上电后 发生了什么?自动取指执行 将一个程序加载到内存中,设置PC指针,指向一个地址(比如 PC = 50), CPU 根据PC的位置 发出取指指令 把50放到 地址总线上,内存通过总线 将50上的命令 传递给 CPU CPU解释执行该指令,该命令是 将 100位置上的值 0 赋值给 axCPU 怎么工作?不断的取指执行。自动取指执行,PC自动累加2.管理CPU的最

2017-01-13 17:30:19 754

原创 7.操作系统历史与我们的学习任务——我们的任务

1.计算机有哪些硬件CPU 内存 显示器 磁盘 打印机 键盘…… 2. 用户使用硬件开机时 初始化了 各硬件,用户通过 系统调用 使用硬件,将 用户的操作变成 设备细节,比如将 Hello字符串转为 屏蔽的像素3. 操作系统 管理硬件资源4.我们要做的是 方便用户使用硬件资源我们的课程中讲 1.通过接口进入系统 2.进程管理:讲fork,fork是什么,是怎么管理进程的 3.内存管理:*p=

2017-01-13 12:21:27 360

原创 6.操作系统历史与我们的学习任务——操作系统历史

1. 1955-1965计算机非常昂贵,上古神机IBM7094,造价250万美元以上 - 计算机使用原则:只专注于计算 - 批处理系统:完成第一个任务,做第二个任务……如果当前任务出错,输出到磁带上,修改下PC,跳转到下一个任务。 批处理系统 处理不了 多种任务:比如有2个任务,一个是IO任务(银行账户余额发生变化时,将存款写入磁带),一个是计算任务。执行磁带写入时,CPU需要等待,写入结束

2017-01-13 12:05:42 689

原创 5.系统接口——系统调用的实现

1.系统调用的直观实现需求:内核地址100的位置,保存的字符:lizhijun,内核中提供一个方法whoami,whoami中打印字符,应用程序 调用内核的 whoami 就 可以 将该字符串 打印到屏幕上// 用户程序main(){ whoami();}//内核whoami(){ printf(100,8);//100的地方开始存的 lizhijun}直观想法:用户程

2017-01-12 16:33:13 1812

dex-tools-2.1-SNAPSHOT.tar

dex2jar 反编译apk 报错 error.zip 的解决 打开 error.zip,报错内容为:java.lang.RuntimeException: can not merge I and Z 解决:需要自己编译 dex2jar,附件是我自己编译的dex2jar

2019-09-18

dex-tools-2.1-SNAPSHOT.zip

dex2jar 反编译apk 报错 error.zip 的解决 打开 error.zip,报错内容为:java.lang.RuntimeException: can not merge I and Z 解决:需要自己编译 dex2jar,附件是我自己编译的dex2jar

2019-09-18

二. 显示输入法.PNG

http://blog.csdn.net/jieqiong1/article/details/71262987的流程图

2017-05-08

Android InputMethod 源码流程图1

http://blog.csdn.net/jieqiong1/article/details/71262987 对应的流程图

2017-05-06

Android InputMethod 源码流程图

http://blog.csdn.net/huangyabin001/article/details/28434989 对应的流程图 图片

2017-05-06

Android键盘AOSP监听delete按键2

Android键盘AOSP监听delete按键:通过重写EditText的InputConnection 类的sendKeyEvent 方法来解决这个问题,添加了deleteSurroundingText方法

2017-01-05

Android键盘 AOSP监听delete按键

Android键盘AOSP监听delete按键:通过重写EditText的InputConnection 类的sendKeyEvent 方法来解决这个问题

2017-01-05

摇一摇demo

摇一摇,伴随振动,摇动开始 结束时 发送Message

2016-12-07

空空如也

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

TA关注的人

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