- 博客(72)
- 资源 (1)
- 收藏
- 关注
原创 Android 内存泄漏场景分析
public class MainActivity extends AppCompatActivity { private static TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
2017-09-16 11:32:18 386
转载 ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介:在自定义view的时候,其实很简单,只需要知道3步骤:1.测量——onMeasure():决定View的大小2.布局——onLayout():决定View在ViewGroup中的位置3.绘制——onDraw():如何绘制这个View。而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到1,2两个步骤就中好了。而这篇文
2016-09-18 16:11:09 522
翻译 google 开发者自定义view的系列(创建view,绘制,交互,view的优化)
Creating Custom ViewsGet startedDependencies and prerequisitesAndroid 2.1 (API level 7) or higherYou should also readCustom ComponentsInput EventsProperty AnimationHardwa
2016-09-13 11:05:03 1501
原创 深入理解Java 中hashcode() 和equals()方法
一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。 为什么这么说呢?考虑一种情况,当向集合中插入对象时,如何判别在集合中是否已经存在该对象了?(注意:集合中不允许重复的
2016-07-25 20:56:07 466
原创 ContentProvider学习笔记
一、什么ContentProvider。。。二、如何使用ContentProvider。。。三、沙场练兵-实例操练。。。四、深入理解ContentProvider原理为什么使用ContentProvider可以实现跨进程的通讯,第一反应肯定是这货和binder有关,因为android中只有稍微跟跨进程搭上边的,必定想到binder。下面就来分析ContentProv
2016-06-30 14:09:49 3680
原创 Android SystemService的启动流程
SystemServer.java(由init进程起来)之后会调用:mSystemServiceManager.startService(FingerprintService.class);startService() 方法: public T startService(Class serviceClass) { final String name = s
2016-05-16 20:39:05 3250
转载 Android 系统启动流程简介
Android 系统启动总结 : Android 系统启动分底层 Linux 内核启动 和 应用系统启动;-- 底层系统启动 : 系统上电, bootloader 启动, linux kernel 启动, init 进程启动;-- 应用系统启动 : init 进程启动关键的进程如 Zygote 进程 和 System Server 等系统服务, 之后进入 Home 界面;
2016-01-29 17:06:30 1240
转载 Android的init过程(二):初始化语言(init.rc)解析
最近分析init启动流程,发现一篇博客分析比我还详细、细致、透彻,转载只是为了记录和分享Android的init过程(一)本文使用的软件版本Android:4.2.2Linux内核:3.1.10 在上一篇文章中介绍了init的初始化第一阶段,也就是处理各种属性。在本文将会详细分析init最重要的一环:解析init.rc文件。init.rc 文件并不是普通的
2016-01-23 21:59:58 456
转载 Linux进程间通信——使用共享内存
最近在看Linux进程间通讯,看到一篇好的博客,转载只是为了记录。大家可以到原博客查看更全面的信息http://blog.csdn.net/ljianhui/article/details/10253345下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正
2016-01-14 20:14:45 1285
原创 深入浅出 Makefile 简单实现
最近在看makefile规则,简单写了一个sample code 验证了一把首先是代码目录架构,有A /B /C 三个文件夹:A文件夹中的代码如下:Ahello.c#include void ahello(const char *name){ printf("----AAAA---I am in Hello %s!\n", name);}Ahello.h
2016-01-14 11:20:41 1972
转载 【Linux学习】epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol
2016-01-08 20:53:23 1542
转载 android 5.0预制APK方法,android5.0预制apk
最近在集成三方APK到system/app下,而且三方apk含有so库,查了很多资料,发现是so库问题导致的,现记录下来,希望能帮助到遇到同样问题的人第一情况、如何将带源码的APK预置进系统?1) 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例2) 将 Test APK的Source code 拷贝到
2016-01-07 13:27:26 2475
转载 UNIX环境编程学习笔记—文件I/O之标准I/O流
1 标准 I/O 流之前学习的都是不带缓冲的 I/O 操作函数,直接针对文件描述符的,每调用一次函数可能都会触发一次系统调用,单次调用可能比较快捷。但是,对于需要频繁进行 I/O 操作的程序,频繁触发系统调用产生的消耗太大。标准 I/O 库提供了带缓冲的 I/O 操作函数,这些函数围绕着一种叫做流(stream)的东西进行。当使用标准 I/O 库打开或创建一个文件时,系统提供了一个
2015-12-10 14:49:05 616
转载 Android Binder设计与实现 – 设计篇(二)
5 Binder 的表述考察一次Binder通信的全过程会发现,Binder存在于系统以下几个部分中:· 应用程序进程:又分为Server进程和Client进程· Binder驱动:Server和Client有不同表述形式· 传输数据:由于Binder可以跨进程传递,需要在传输数据中予以表述在系统不同部分,Binder实现的功能不同,表现形式也不一样的。接下
2015-10-12 16:20:23 452
转载 Android Binder设计与实现 - 设计篇
目录(?)[-]引言面向对象的 Binder IPCBinder 通信模型1 Binder 驱动2 ServiceManager 与实名Binder3 Client 获得实名Binder的引用4 匿名 BinderBinder 协议1 BINDER_WRITE_READ 之写操作2 BINDER_WRITE_READ 从Binder读出数据3 struct bind
2015-10-12 16:15:23 641
转载 计算机网络笔记-TCP层
运输层是居于网络层之上,应用层之下。在运输层中,有着两个十分重要的因特网协议:TCP和UDP运输层协议。运输层协议为运行在不同主机上的应用进程之间提供逻辑通信。而网络层协议是为了两台不同的主机之间提供逻辑通信。运输层协议是在端系统中而不是在网络路由器中实现的。运输层中,主要有以下的几个重要的知识点:多路复用和多路分解UDP协议TCP协议TCP协议的可靠传输机制TCP协议的流量控
2015-10-12 10:19:46 5899 1
原创 void (*b[10]) (void (*)())
void (*b[10]) (void (*)());C变量的声明都是由两部分组成的:类型,以及一组类似表达式的声明符(declarator)。声明符类似于表达式,对它求值应该返回一个声明中给定类型的结果。例如,我们来看一个简单的声明:float f;这里f就是声明符,对其求值,应该得到一个float型的数值。然后看括号的作用,比如:float ((f));
2015-09-14 16:29:39 1518 1
转载 strtol()详解
long int strtol(const char *nptr, char **endptr, int base)strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;b
2015-09-08 16:51:29 698
转载 字符数组与字符指针
1.字符指针可以指向一个字符串。我们可以用字符串常量对字符指针进行初始化。例如,有说明语句:char *str = "This is a string.";是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。这里要注意字符指针与字符数组之间的区别。例如,有说明语句:char string[ ]="This is a string.";
2015-09-08 14:58:23 415
转载 Android内存泄露案例分析(内存分析工具DDMS和MAT工具)
本文整理自:【技术公开课】Android内存泄漏案例分析(点击链接,观看视频),演讲PPT>>下载地址。一款优秀的Android应用,不仅要有完善的功能,也要有良好的体验,而性能是影响体验的一个重要因素。内存泄露是Android开发中常见的性能问题。这篇文章,通过我们曾经遇到的一个真实的案例,来讲述一个内存泄露问题,从发现到分析定位,再到最终解决的全过程。这里把整个过程分为四个
2015-09-08 13:23:02 4129
转载 ubuntu下tcpdump总结
原文地址:点击打开链接Ubuntu默认是安装好了tcpdump工具的,如果没有安装的话使用sudo apt-get install tcpdump即可安装。 (如果遇到tcpdump: no suitable device found的问题,检查一下是不是在用root权限运行tcpdump,tcpdump只能在root权限下工作) 安装好tcpdump之后,运行tcpdu
2015-09-07 13:48:18 1647 1
转载 Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java
2015-09-02 18:56:07 528
转载 Android github上开源项目集合
Android开源项目第一篇——个性化控件(View)篇主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等。
2015-08-27 10:50:58 1583
转载 Linux Pthread 深入解析
Outline - 1.线程特点- 2.pthread创建- 3.pthread终止 - 4.mutex互斥量使用框架 - 5.cond条件变量 - 6.综合实例==============================================================================
2015-07-22 14:29:28 500
原创 Linux strsep() 用法
strsep(),作为strtok的升级版,是一个很有用的字符串处理函数man strsep:#include char*strsep(char **stringp, const char *delim);Be cautious when using this function. If you do use it, note that: This
2015-07-14 10:54:04 1881 1
转载 采用dlopen、dlsym、dlclose加载动态链接库【总结】
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一
2015-05-16 18:43:32 455
转载 linux Posix线程同步(条件变量) 实例
条件变量实例 条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在bool变量test_cond为true时才能继续执行,而test_cond的值是由t2来改变的,这种情况下,如何来写程序呢?可供选择的方案有两种:第一种是t1定时的去轮询变量test_co
2015-05-14 17:25:44 2477
转载 图解Git
如果图片不能显示,试试非SVG版此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。 如果你想知道这个站点怎样产生,请前往GitHub repository。正文基本用法约定命令详解DiffCommitCheckoutDetached HEAD(匿名分支提交)ResetMergeCherry PickRebase技术说明基本用
2015-05-05 14:21:47 448
转载 /data/system/packages.xml
/data/system/packages.xml这个文件由PackageManagerService.java生成,里面记录了系统当中安装的APK的所有属性,权限等信息。当系统中的APK安装、删除、升级时,文件就会被更新。 标签定义了目前系统中定义的所有权限。主要分为两类:系统定义的(package属性为android)和APK定义的(package属性为APK的包名)。
2015-05-05 11:07:30 2524
转载 Socket通信 listen accept 函数
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成
2015-03-10 20:32:52 1061
转载 linux中select使用方法
转载自: linux中select使用方法select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。 文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On succe
2015-03-03 18:16:02 574
转载 RIL层源码分析
写在前面 1、本文从宏观的角度去分析问题,因此忽略了一些非主线的函数。 2、同理,对于函数内部非主要的逻辑部分,也采取了省略。 3、受限于知识的积累和理解能力,文中描述如有分析不妥之处,希望能够得到大家更正。从Main函数开始的故事 Android的智能机架构是应用处理器+基带芯片,也就是AP+Modem的模式,AP部分相当于CPU,Modem相当于网卡
2015-02-15 17:03:07 7114
转载 利用DDMS 查看 分析线程阻塞
在实际应用中有可能出现如下场景,在Activity 中,新建后台线程(Thread,或者 AsyncTask) 处理网络请求或者其他耗时的工作,但是 主界面出现卡顿现象,ANR 等。有可能是主线程被阻塞。我们可以利用DDMS 来分析主线程和其他工作线程是否出现阻塞,并找出 阻塞的原因。 利用DDMS 分析线程主要有如下几个步骤: 1.将手机连接到 电脑,打开Eclipse 的DDM
2015-01-19 10:16:32 795
转载 Android内存泄漏分析及调试
尊重原创作者,转载请注明出处:http://blog.csdn.net/gemmem/article/details/13017999此文承接我的另一篇文章:Android进程的内存管理分析 首先了解一下dalvik的Garbage Collection:如上图所示,GC会选择一些它了解还存活的对象作为内存遍历的根节点(GC Roots),比方说thread
2015-01-08 13:57:01 716
转载 Android进程的内存管理分析
尊重原创作者,转载请注明出处:http://blog.csdn.net/gemmem/article/details/8920039最近在网上看了不少Android内存管理方面的博文,但是文章大多都是就单个方面去介绍内存管理,没有能全局把握,缺乏系统性阐述,而且有些观点有误。这样对Android内存管理进行局部性介绍,很难使读者建立系统性概念,无法真正理解内存管理,对提高系统优化和系统
2015-01-08 13:54:50 534
转载 Android通过共享用户ID来实现多Activity进程共享
1.同一Apk中的同一包中的Activity调用时进程状况验证[1]创建Project: project name: FirstProject package:com.demo 默认Activity:MainActivity[2]添加一个新的Activity: name:SecondActivity[3]修改布局。在MainActivity布局中添加一个
2014-08-13 09:57:28 517
转载 C-字节对齐
写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间和空间上
2014-05-08 17:14:40 517
转载 C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值
2014-05-05 20:00:34 576
转载 LTE中基本通信过程的理解——小区搜索过程
小区搜索过程1. UE开机,在可能存在LTE小区的几个中心频点上接收信号(PSS),以接收信号强度来判断这个频点周围是否可能存在小区,如果UE保存了上次关机时的频点和运营商信息,则开机后会先在上次驻留的小区上尝试;如果没有,就要在划分给LTE系统的频带范围做全频段扫描,发现信号较强的频点去尝试;2. 然后在这个中心频点周围收PSS(主同步信号),它占用了中心频带的6
2014-01-06 15:31:26 8456
转载 LTE中基本通信过程的理解——下行调度
下行调度1. 下行信道质量测量ENB发送cell specific reference signal 给UE,UE估计CQI并上报给ENB。【这里有点不太准确,我的理解:cell specific reference signal是cell级别的,和UE没有多大关系,UE上报CQI有两种方式:周期性和非周期性,可以同时存在,若同时上报的话,周期性的会被非周期性取代,仅发送非周期的CQI。周
2014-01-06 15:23:13 5669
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人