自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江三沐洛的博客

江三沐洛的博客

  • 博客(29)
  • 资源 (10)
  • 问答 (3)
  • 收藏
  • 关注

原创 Java的垃圾回收机制

java在内存中大致可以分为新生代以及老年代,其垃圾回收机制也不相同。 新生代一般会分为三部分,一块较大的Eden空间和两块较小的Survivor空间,其空间大小比例一般为8:1:1,其中可以使用的有效部分为一块Eden和一块Survivor空间,即每次新生代中可用内存空间为整个新生代空间的90% 我们使用java创建新的对象时,大部分时间都会创建在Eden空间中,当Eden没有足够的空间容纳...

2018-06-20 19:12:00 247 1

原创 Android Studio 打包成jar文件并混淆代码

在Studio中混淆打包需要修改模块下的build.gradle文件和proguard-rules.pro文件1:首先修改指定模块的build.gradle文件,在末尾加上下述代码task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") { //删除之前编译混淆jar包 delete'build/out...

2018-03-01 11:14:44 2746

原创 xxxxxx/classes.jar: unknown package name of class file xxxxxx

编译android源码时如果出现标题类似错误 需要到build/core/tasks/check_boot_jars目录下在package_whitelist.txt 文件中追加对应的类或者包

2018-02-05 15:07:24 5864

原创 Fail to contact Jack Server: Problem reading xxxxxx

同一个服务器上不同用户的Jack编译服务需要配置成不同的port端口,所以需要自己手动改一下修改~/.jack-server/config.properties中tcp端口jack.server.service.port=80xx 自己填jack.server.admin.port=80xx+1修改~/.jack-settings中tcp端口SERVER_PORT_SERVIC

2018-02-05 14:59:51 20272

原创 普通广播与本地广播

我们平常使用的一般都是全局广播,使用方法就不多说了,下面介绍下本地广播的使用方法注册 private MyBroadcastReceiver receiver; private IntentFilter filter; @Override protected void onCreate(Bundle savedInstanceState) { super.

2017-10-30 12:31:47 969

原创 安卓Context介绍

Context是什么Context的中文翻译为:语境; 上下文; 背景; 环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指聊天的界面以及相关的数据请求与传输,Context在加载资源、启动Activity、获取系统服务、创建Vie

2017-10-11 21:10:38 464

原创 Activity界面的添加与删除

安卓中是由WindowManagerService来管理所有的窗口,下面来看下Activity是如何与WindowManagerService交互,控制应用界面的添加与删除的我们通常都是在onCreate方法中调用setContentView来设置布局,此时只是完成了视图树的创建,并没有通知WindowManagerService添加界面,真正添加界面是在回调完onResume完成的我们的Activ

2017-09-26 14:32:02 1614

原创 Hierarchy Viewer的使用

Hierarchy Viewer工具提供了一个可视化界面显示布局的层次结构,让我们可以进行调试,从而优化界面布局结构。我们可以通过Android Device Monitor来启动启动之后在模拟器上打开相应界面,之后选择相对应的进程和Activity名称在右边的Tree View界面中就会显示出选中界面的布局结构之后选择一个节点,并点击右上角的测量图标此时就获取到了布局绘制的时间这里我们主要关注下面

2017-09-22 11:26:40 345

原创 安卓7.0 系统服务启动流程

安卓的系统服务都是由SystemServer这个进程创建的,那从他的main函数开始看看public static void main(String[] args) { new SystemServer().run(); }新建了一个SystemServer类,并调用他的run方法private void run() { ...... star

2017-09-20 20:40:56 645

原创 TraceView的使用

Traceview是android平台配备的一个性能分析工具,通过图形化的方式让我们了解程序的性能,并且能具体到method。 使用方法有两种: 1:在代码中追踪//追踪开始Debug.startMethodTracing();//追踪开始Debug.stopMethodTracing();在你想开始监听的时候调用Debug.startMethodTracing();结束的时候调用Debu

2017-09-15 21:23:20 459

原创 LeakCanary的使用

LeakCanary是一个对Android和Java进行内存泄露检测的库 使用方法:首先在gradle中进行配置dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.2' releaseCompile 'com.squareup.leakcanary:leakcanary-android-

2017-09-14 19:51:04 288

原创 onMeasure的宽高生成解析

在View的绘制流程中,onMeasure是负责测量控件的大小的@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }他的两个参数分别代表宽和高,接下

2017-08-29 21:06:17 944

原创 requestDisallowInterceptTouchEvent实现原理

我们为了让底部的控件处理事件,不被父控件拦截,一般我们会调用v.getParent().requestDisallowInterceptTouchEvent(true);来阻止父控件对事件的拦截,来看下它的实现原理。首先明确下v.getParent()对于底部的View来说,得到的就是上层的父控件,也就是上层的ViewGroup,来看下ViewGroup的requestDisallowInterce

2017-08-24 12:04:37 1357

原创 Activity的setContentView解析

我们一般设置Activity的界面,都是在onCreate方法中通过setContentView完成,之后就会在手机上显示我们设置的界面,现在我们走下流程,看看系统究竟是如何做的。 首先Activity是在ActivityThread中的performLaunchActivity方法中被创建的private Activity performLaunchActivity(ActivityClient

2017-08-16 19:46:37 377

原创 安卓插件化实例

最近想研究研究安卓插件化的知识,看了看Android插件化完美实现代码觉得很好很强大,所以就来造个轮子,学习记录下。 首先声明下,实现的例子是基于安卓5.1的,而且实现的功能仅仅是能启动插件的Activity,当然了原理弄懂了,别的也好说,那么下面正式开始。实现插件化大概有三个难点1:使我们插件中的代码可以被宿主程序调用 2:Activity等四大组件可以有正常的生命周期 3:插件可以正常使用

2017-08-11 17:55:59 441

原创 安卓OnTouchListener,onTouchEvent,onClickListener执行顺序

安卓控件有很多监听事件,比较典型的有OnTouchListener,onTouchEvent和mOnClickListener,来看下他们的执行顺序 我们先自定义一个Button,在他的onTouchEvent方法中加入log@Override public boolean onTouchEvent(MotionEvent event) { Log.e("xw", "onT

2017-08-03 20:08:00 12727

原创 AMS与Activity的交互

上面是Activity典型的生命周期流程图,基本的就不讲了,提两个问题来求解下 1:当启动一个新的Activity时,新旧两个Activity的生命周期执行顺序 2:当你在onCreat中调用startActivity或者finish的时候,生命周期执行流程首先来求解第一个问题,很简单,建立两个Activity,每个生命周期上打上log@Overrideprotected void onSta

2017-08-02 21:05:34 786

原创 安卓Binder解析

Binder是Android系统进程间通信(IPC)方式之一,他的使用方法如下 先定义一个aidl文件package com.example.binderdemo;interface IBinderTest { void setName(String name); String getName();}接着我们写一个service,里面实现具体的功能public class Bin

2017-07-29 16:23:54 359

原创 AsyncTask原理

AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask类,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程,且其是串行执行的,下面从原来上分析他是如何做的class DownloadTask extends AsyncTask<Integer, Void, String> { @Ove

2017-07-27 13:04:38 223

原创 Java中静态代码块执行顺序

新建一个类,里面含有静态代码块,非静态代码块以及构造函数public class Parent { private final static String TAG = "MainActivity"; static { Log.e(TAG, "父类的静态代码块"); } { Log.e(TAG, "父类的非静态代码块"); } p

2017-07-24 17:12:41 389

原创 (安卓)Annotation(注解)实例

Annotation就是注解了,JDK1.5新增加功能,该功能可用于类,构造方法,成员变量,方法,参数等的声明中。 常见的比如说@Override,表明这个方法是重写了父类的方法,以及我们在调用api的时候,时不时会看到某个方法被画上了横线 其实就是这个方法用@Deprecated进行了注解,表明这个方法不再推荐使用@Deprecatedpublic int getSeconds() {

2017-07-20 15:23:54 437

原创 RxJava原理分析

首先声明下,本文并不会讲解RxJava的基本使用方法,建议对RxJava有一定了解的再来看本文。 RxJava已经有了2.0的版本,而本文是对1.0原理的描述。 RxJava是一个可以实现异步操作的框架,其优点包括可以方便的进行线程转换,数据转换以及整个异步实现流程比较清晰,使用链式调用。 首先引包compile 'io.reactivex:rxjava:1.3.0'compile 'io.

2017-07-18 18:25:18 784

原创 EventBus的使用与原理

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 使用方法如下:首先在gradle中进行配置compile 'org.greenrobot:eventbus:3.0.0'新建一个消息类public

2017-06-30 11:41:15 234

原创 安卓中invalidate和requestLayout的实现和区别

安卓中invalidate和requestLaoyout都是刷新View用的,用下面这张图来表示他们的流程invalidate和postInvalidate的实现两者的区别:invalidate是在主线程调用,postInvalidate在非主线程中调用。首先看postInvalidate的实现public void postInvalidate() { postInvalid

2017-06-28 18:47:55 4892

原创 安卓NDK开发

NDK首先是环境的搭建,在Studio中依次选择Preferences-Appearance&Behavior-System Settings-Android SDK,选择SDK Tools,在其中进行NDK的下载 在创建新项目时,在local.properties文件中如果显示则证明已经配置完成。 下面完成一个简单的Demo,从native中获取hello world并显示在屏幕上。 在Ac

2017-04-05 17:24:12 260

原创 几种加密方式

1 Base64加密方式(可逆)public class Base64Utils { private static final String TAG ="Base64Utils"; private static char[] base64EncodeChars = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H

2017-03-09 18:50:50 962

原创 android中利用opencv进行图像识别

之前开发的时候老大让研究下图像识别的功能,同事推荐看看opencv,发现对于移动端来说opencv的资料和demo都比较少,现在整理下之前的工作成果。 首先是进行配置工作,先导入opencv的一个代码模块 之后是导入opencv的具体的算法,当然是c++写的 配置完毕后开始进行正式的代码阶段,首先权限设置,主要就是摄像头权限的获取<uses-permission android:name=

2017-03-08 16:16:57 32478 13

原创 android中webview与js的交互

android中webview与js的交互最近做Android项目时需要进行webview与html页面中的js进行交互,包括android调用js以及js调用android本地代码,现将代码整理记录下。 整个布局比较简单,就是的一个TextView加一个WebView<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:androi

2017-03-08 10:54:31 362

原创 安卓Handler详解

在安卓中由于主线程中不能进行耗时操作,我们往往需要另外开启一个线程来进行耗时操作,操作完成之后,我们通常需要使用Handler来将结果展现在界面中,下面我来详细说明下handler的使用。1.Handler的创建public Handler mHandler = new Handler();Handler的创建只要new 一个Handler的对象就可以了,那么新建一个对象,系统究竟做了

2016-10-17 17:53:03 301

利用openCV识别图片Demo

在安卓中,利用openCV识别图片Demo

2017-08-18

安卓插件化demo

安卓插件化demo,基于安卓5.1 需要将chajiandemo生成的apk命名为chajiandemo.apk然后放到手机存储根目录下

2017-08-11

BinderDemo

安卓利用binder进行跨进程通信demo

2017-07-29

安卓Annotation实例

安卓中生成自己的annotation(注解)并调用的demo

2017-07-20

EventBusDemo

安卓中使用eventbud的demo

2017-06-30

安卓ndk demo

安卓ndk的小例子

2017-04-05

安卓ndk demo

安卓使用ndk小例子

2017-04-05

数据结构与算法分析:C语言描述(原书第2版).pdf

数据结构与算法分析:C语言描述(原书第2版).pdf

2017-03-28

android中webview与js交互

一个简单的android中webview与js交互的例子

2017-03-08

android中webview和js交互demo

一个简单的android中webview与js交互的例子

2017-03-08

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

TA关注的人

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