自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 Binder详解

最近在阅读源码时屡屡被Binder给绕进去了,感觉这玩意好像特别的重要,所以就单独的抽出来仔细的研究下,本文主要是从java层面来分析,对于底层内核的Binder驱动就不做深入探讨了,由于本文是以AIDL的使用情景来分析的,所以对于不会使用AIDL的童鞋先看另一篇文章http://blog.csdn.net/u012481172/article/details/50925381。废话不多说。

2016-04-26 16:59:43 4549

原创 关于View的一些问题

1、View的回调方法的顺序是怎样的View从加载开始一些列的回调方法的流程如下:  onFinishInflate()→onMeasure()→onSizeChanged()→onLayout()→onDraw()→onWindowFocusChanged()。onMeasure()和onLayout()以及onDraw()有可能会执行多次。

2016-02-22 14:02:07 492

原创 Android小知识清单(二)

1、Toast的另一种用法    Toast我们通常用来提示文字,但是也可以用来显示整个View来显示,如下: Toast toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.FILL, 0, 0); toast.setView(toastView); toast.show(

2016-02-22 11:16:17 563

原创 Android小知识清单(一)

1、invalidate()和postInvalidate()的区别:        对于invalidate()源码注释如下:     *Invalidate the whole view. If the view is visible,     * {@link #onDraw(android.graphics.Canvas)} will be called at some poi

2015-03-13 17:09:35 812

原创 Android项目的错误异常收集日志记录

今天上午把工作做完,下午就研究自己不懂的知识点,研究的情况如下:1)实现Android程序的异常捕捉日志记录上传到服务器:         主要是自己定义一个CrashHandler ,然后implements UncaughtExceptionHandler类。来实现捕捉异常。         其次自己实现一个Application,在其onCreate中注册CrashHandl

2014-12-17 18:02:32 1082

原创 Java基础概念

我们已知Java有三大主要特性:封装、继承、多态。为了更全面的探索学习,我们把接口、抽象也加入到其主要特性之列。故,本篇就探讨Java的五大特性:封装、继承、多态、接口、抽象。提供一个java学习网址:https://www.tutorialspoint.com/java/java_encapsulation.htm封装继承多态接口 封装封装是Java的基础特性之一。...

2018-07-21 15:49:29 1568

原创 AndroidStudio优化指南

1、AS打包时将无用的资源排除掉,使其不被打包进apk。在app.gradle中添加minifyEnabled true和shrinkResources true即可,如下: buildTypes { release { minifyEnabled true shrinkResources true min

2016-11-23 17:55:02 556

原创 SRS流媒体编译部署

一、下载代码:         git clone https://github.com/ossrs/srs。     注意,下载完成后只有main.go,main.test.go,README.mk三个文件,此时要切换到分支上去,比如用以下命令是切换到srs2.0上:         git pull && git checkout2.0release二、编译      

2016-11-04 23:36:30 4861

原创 JS杂七杂八

一、JS跨域请求       浏览器对于JS跨域请求默认是关闭的,所谓跨域请求就是跨网站域名请求,比如在A站去请求B站的数据是不被允许的,严格来说跨域是指不同域名或不同端口号之间的请求,如下是区别:

2016-08-01 14:27:57 441

原创 Launcher启动过程详解

Android的Home界面是如何启动的?

2016-05-03 15:40:35 600

原创 ART和Dalvik的比较

ART是什么?他和Dalvik是什么关系?

2016-05-03 15:03:25 2088

原创 View事件拦截的两种方法

通常ViewGroup要对事件进行拦截可以通过重写onInterceptTouchEvent()方法并返回true,就表示要对事件进行拦截,拦截之后事件就不会再传递到子View,自然的,子View的onTouchEvent()方法也不会被调用了。      另外如果你不想重写ViewGroup的onInterceptTouchEvent()来拦截事件的话,可以让父容器调用requestDisa

2016-04-29 13:12:20 6310

原创 Android初窥

一、App如何存在于系统?      Android APP是用Java语言编写的由Android SDK工具编译并和其它资源文件一起打包到APK文件。一个APK文件包含了要安装的App所需要的一切内容。一单安装到设备上,每一个Android APP就生存在它自己的安全沙箱。  (1)Android操作系统是一个多用户Linux系统,每一个app就是一个不同的用户。  (2)系

2016-04-28 12:48:40 340

原创 BindService详解

Service启动得两种方式分别为startService()、bindService(),但是他们的使用场景是不一样的。。。

2016-04-27 16:19:16 6633 2

原创 Ant读取XML文件的值

ANt读取xml值

2016-04-15 17:48:37 2570

原创 AndroidManifest.xml文件详解

AndroidManifest.xml文件详解

2016-04-14 17:54:39 5935

原创 关于NoClassDefFoundError错误

以前遇到过NoClassDefFoundError错误,解决后也没当回事,然后今天又出现了,所以记录下。      NoClassDefFoundError是一个错误,而ClassNOtFoundException是一个异常,这是有区别的。     NoClassDefFoundError出现在Android中都是由于没有打包进dex文件中所导致的,我几次遇到这样的情况就是首先反编译dex

2016-04-14 12:59:55 939

原创 Android应用的uid和pid

大家在用开发工具连接手机时一定见过下图的进程编号:    PID和UID存在的意义        Pid是进程ID,Uid是用户ID,只是Android和计算机不一样,计算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid就是那个用户,而Android中每个程序都有一个Uid,默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果应用之间要互

2016-04-08 13:26:15 6009

原创 批处理语法详解

批处理语法

2016-04-01 15:40:26 3444

原创 Android中获取各种服务是哪里来的

当app第一次加载时就开始注册了那些服务,具体来说就是在应用创建ContextImpl实例的时候调用了SystemServiceRegistry类来进行注册,其注册的服务(就是具体的相关的服务的实例)保存在HashMap的对象SYSTEM_SERVICE_FETCHERS中:      private static final HashMap> SYSTEM_SERVICE_FETCHERS

2016-03-30 12:26:33 1791

原创 JVM之类加载机制

在上一篇文章中我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都要加载到虚拟机中之后才能运行和使用。而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?这些都是本文所需要解决的问题!      虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化最终形成了可以被虚拟机直接使用的Java类型,这就

2016-03-26 19:55:28 270

原创 JVM之类文件结构

实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它至于“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。       Java语言中的各种变量、关键字和运算符号的语义最终都是有多条字节码指令组合而成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。

2016-03-22 21:35:57 1574

转载 从init.rc说起

1 简述Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得使用转义字符"\",如果在一行的末尾有一个反斜杠,那么是换行折叠符号,应该和下一行合并成一起来处

2016-03-22 11:12:05 264

原创 C/C++拾起

static关键字     static修饰的全局变量和函数只能在本文件类使用。const关键字    const是指常数,这种数存放在rom中,也就是硬盘里,只有使用的时候才读取到内存。const数不能被修改,也不能是局部变量。

2016-03-21 15:10:36 267

原创 AIDL的使用

什么是AIDL    aidl的全称是Android Interface Definition Language,这是为了实现跨进程通信而在客户端和服务端编写的接口。

2016-03-21 13:37:00 530 1

原创 JVM之垃圾收集器与分配策略

通过以上JVM两篇文章的介绍,我们大致了解了Java的内存模型以及对象的存储和分配,本文在基于以上知识开始讲解内存的回收,本文尝试解决以下的几个问题: (1)哪些内存需要回收? (2)什么时候进行内存回收? (3)如何回收内存?   上篇文章文章我们已经讲解了Java内存运行时内存区域的各个部分,其中程序计数器、虚拟机栈和本地方法栈三个区域随线程而生随线程而灭;栈中的栈帧随着方法的

2016-03-20 22:37:12 418

原创 JVM之内存区域分配

JVM的内存模型,对象的分配

2016-03-20 17:06:21 2781 2

原创 Java之问(一)

如何强制执行垃圾回收?  (1)首先,垃圾回收是JVM自动处理的,我们不能强制致敬,尽管我们可以调用System.gc()。  (2)JVM不能保证GC能够直接开始回收。  (3)每一个class都从Object基础了finalize()方法。  (4)当垃圾回收器觉得应用中没有更多的引用对象存在时就会调用finalize()。因此我们手动调用finalize()并没有什么多大作用

2016-03-20 11:35:50 294

原创 JVM之Java程序与内存映射

什么是JVM       首先看下一个Java程序是如何在机器上执行的:      Java源程序(.java文件)-->Java编译器(如Eclipse) -->字节码(.class文件)-->JVM编译器--> 装配 -->机器码 --> 经过系统总线 -->微处理器-->逻辑门 -->电路 -->设备硬件.

2016-03-19 21:34:09 1074

原创 Java到底是值传递还是引用传递

在Java中,方法的参数传递永远是值传递,不存在引用传递。  实际上,如果一个方法的参数是一个对象,那么当传递这个对象的时候实际上是传递的一个对象的地址过来,而不是传递的一个引用(变量)更不是对象本身,所谓引用变量就是我们 A a = new A(),此a就是一个引用变量,它的值就是一个指向A对象的地址。如果我们把a作为某一个方法的参数传递过去,那么此时传递的仅仅是这个引用a的值(对象的地址)

2016-03-18 23:39:53 280

原创 finally会执行吗

如下代码,finally里的代码是否会执行?public class MainQueue { public static void main(String args[]) { System.out.println(MainQueue.test()); } public static int test() { try { return 0; } finally {

2016-03-18 23:11:54 342

原创 Lock & Condition

Synchronized同步块的不足      在多线程环境下保证线程同步的方法大多是使用synchronized关键字,但是这个关键字在某些环境下是很死板的。其主要缺点如下:     (1)如果一个线程已经在一个synchronized块中执行,另一个线程视图进入这个同步块,那么它必须等待直到当前占用这那个同步块的线程执行完并退出。如果线程一直没有进入同步块,那么那个等待的线程就一直

2016-03-18 12:17:11 333

原创 基于栈虚拟机和基于寄存器虚拟机的比较

基于寄存器的虚拟机和基于栈的虚拟机有什么不同?

2016-03-16 14:04:34 9544 2

原创 Dalvik虚拟机详解(上)

什么是Dalvik?    首先,每一个Android应用都运行在它自己的进程中也就是它自己的Dalvik虚拟机实例,也即每个app都有自己的dalvik虚拟机实例,他们都是私有的不共享的。Dalvik虚拟机一开始就被设计成可以在一个设备上高效的大量运行(Dalvik虚拟机实例)。Dalvik虚拟机执行器会执行.dex格式的文件。Dalvik虚拟机是基于寄存器的。什么是Zygote?

2016-03-15 17:44:20 6557

原创 一个APP是否可以没有Activity?

app是否可以没有Activity?能否实现一个没有界面的app?

2016-03-15 10:58:57 2952

原创 什么是字符串(String)的不变性?

Strnig的不变性是指什么

2016-03-07 14:39:12 5049 1

原创 如何正确停止一个线程

首先肯定是不能用Thread的stop()方法的,因为此方法是非常不安全的,而且已经被废弃了,那么在这里就给出一种官方的推荐方案。    private static Thread mThread; private static Thread mThread; static StringMain.MyRunnable mRunnable = new StringMain().new MyRu

2016-03-01 14:27:36 7552

原创 常用命令合集

1、查看所有Android设备上所有进程    手机连上电脑,cmd→adb shell,然后输入ps命令即可显示所有进程。

2016-03-01 09:41:01 253

原创 BlockingQueue!

Queue接口继承了Collection接口,其内部定义了六个方法,分为三大类,分别是新增元素、删除元素、检索元素。每一个大类都提供了两个方法,这两个方法的作用可以用下面的表格来描述:        (1).add()和offer():这两个方法是向队列添加元素,不同之处在于如果队列已经添加满了还继续添加add()方法就会抛出异常,而offer()会返回false值(如果队列没有满,则of

2016-01-06 16:47:02 3253

原创 Ant之Task

每个Task都是一系列的可执行的代码。    一个Task可以包含大量的属性,属性值也可以引用Property,这些引用都会在执行之前由Ant完成解析。

2015-12-10 23:41:27 1036

Java静态代理与动态代理demo

这里提供了静态代理和动态代理的入门写法~一看即懂!

2015-12-03

空空如也

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

TA关注的人

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