周康的博客

一蓑烟雨任平生


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

JNI(三):基于OpenCV的人脸检测

发表于 2018-06-01 | 分类于 Android

概述

基于前两篇JNI的准备,这次尝试集成一个Opencv的sdk,参照demo实现一个人脸检测功能。人脸检测与人脸识别是两种不同的概念。人脸识别更加复杂,从数据采集到获取样品特征值,里面涉及到的数据处理包含了很多高等数学的概念。希望以后能实现一个吧。
今天主要是实现人脸检测功能。
《JNI(一):基础理论知识》
《JNI(二):环境配置和简单使用》
看下效果

阅读全文 »

Java注解

发表于 2018-05-21 | 分类于 Android

概述

记得之前有个iOS问过我 @BindView 是什么,我说是注解,他问我什么是注解,我回答说相当于一种接口。他后面好像还问一些关于注解的问题,我一时语塞,竟然发现我天天使用的注解,要解释它的时候竟然有种说不上来的感觉。
今天想把关于注解的知识归纳一下:

  • 什么是注解
  • 有啥用
  • 应用场景
  • 如何自定义
    阅读全文 »

JNI(二):环境配置和简单使用

发表于 2018-05-16 | 分类于 Android

前期准备

下载JNI所需的工具集并进行配置:


阅读全文 »

JNI(一):基础理论知识

发表于 2018-05-08 | 分类于 Android

前言

在Android应用中,一般输出给用户的都是音视频和文字,这些输出的结果往往都是处理过的,例如美颜相机,直播等之类的应用。这些应用用Java层的依赖或者库来实现经常都不太如人意。而这个时候就要用JNI了。
当涉及到用JNI来实现需求的时候,就需要更高要求的专业知识,所以学习JNI是Android进阶的必由之路。

阅读全文 »

JVM:双亲委派模型

发表于 2018-04-26 | 分类于 Java

类加载器的作用

实现类加载的功能(类加载需5个步骤)

将.class文件加载到内存中,并进行校验,解析和初始化等。

确定类的唯一性。

判断两个类是否相等的依据是:是否由同一个加载器加载。
相对于虚拟机而言:
若由同一个加载器加载,则这两个类相等。
若不是同一个类加载器加载,则两个类不相等。
相对于java程序而言:
可通过equals(),isInstance(),instanceof来判断

阅读全文 »

WebView与js交互

发表于 2018-04-25 | 分类于 Android

概述

现在开发一个电商类的应用,比较流行的做法就是采用混合式开发,即原生应用里面嵌入网页,这种应用称为Hybrid App。这种开发方式优点是成本低,跨平台,周期短,灵活性强。
但是也有一个致命的缺点就是体验差,毕竟是网页,加载过程会比原生慢。但这不妨碍它的流行。今天来记录一下原生Android如何与js交互的要点。其实简单来讲就是两点:

  • Android调用js方法。
  • js调用Android方法。
阅读全文 »

Java字节码和类加载

发表于 2018-04-19 | 分类于 Java

类加载

将描述类的数据 从Class文件加载到内存 & 对数据进行校验、转换解析 和 初始化,最终形成:可被虚拟机直接使用的Java使用类型

类加载过程

分为五个步骤:加载 -> 验证 -> 准备 -> 解析 -> 初始化

  1. 加载:将外部.class文件加载到虚拟机
  2. 验证:确保加载进来的.class文件包含的信息符合虚拟机的规范
  3. 准备:为类变量分配内存,设置类变量的初始值
  4. 解析:将常量池内的符号引用转成直接引用
  5. 初始化:初始化类变量

Java字节码

Java的产生是由javac将.java文件编译成.class文件。.class文件中存放的就是.java文件里的内容。例如:

1
2
3
4
5
6
public class Demo{
private int m;
public int inc(){
reture m+1;
}
}

将上面定义的Demo.java(源文件)通过javac编译成.class文件,然后用16进制文本打开.class文件,文本里显示的是十六进制的符号内容。这段符号的组成是遵守着虚拟机的规范的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
C38AC3BEC2BAC2BE2020203320130A20
04200F09200320100720110720120120
016D012001490120063C696E69743E01
2003282956012004436F646501200F4C
696E654E756D6265725461626C650120
03696E6301200328294901200A536F75
72636546696C6501200944656D6F2E6A
6176610C200720080C20052006012004
44656D6F0120106A6176612F6C616E67
2F4F626A656374202120032004202020
01200220052006202020022001200720
08200120092020201D20012001202020
052AC2B72001C2B120202001200A2020
20062001202020012001200B200C2001
20092020201F20022001202020072AC2
B420020460C2AC20202001200A202020
062001202020042001200D2020200220
0E

但是这些十六进制符号内容代表的是什么意思呢?
如果我们再用javap -verbose来反编译查看一下

阅读全文 »

JVM:Java对象的创建与内存布局

发表于 2018-04-17 | 分类于 Java

前言

在开发过程中如果要创建一个对象可以通过以下几种方式:
new、克隆(Clone)、反射(Class.forName(“类全限定名”).newInstance(),Constructor类的newInstance)。
今天只针对通过关键字new来创建对象作分析,通过new创建一个对象的方式如下:

1
Object o = new Object();

但在new之后J虚拟机还会经过一系列的操作才能创建,今天来记录一下new之后的事情,以及对象的组成结构。

对象的创建

示意图


阅读全文 »

RecyclerView分析

发表于 2018-04-09 | 分类于 Android

概述

几乎所有的应用中都会有列表的存在,以前喜欢用ListView,而现在用的更多的是RecyclerView。列表是展示数据的最常见的载体,所以在处理大数据列表的时候要特别注意内存问题,卡顿问题和数据刷新问题。
今天来重点分析一下RecyclerView。

阅读全文 »

添加依赖失败

发表于 2018-04-09 | 分类于 Android
概述今天换了台电脑,想把项目移到新电脑上去,结果发现了一个比较奇怪的问题,就是明明已经添加依赖了,可是类却是一直导不进来。而且这个类是可以在本地搜索到的。如下图: 问题还是挺搞笑的,如果我依赖导错的话,为什么会搜索到这个类,后面想了一下应该跟本地的配置有关,最后发现gradle的distributionUrl有问题,没有下载成功,本地不存在gradle-4.1-all.zip。索性下了一个添加进来 ...
阅读全文 »
1234…8
周  康

周 康

猥琐发育,别浪!

76 日志
6 分类
36 标签
GitHub E-Mail WeiBo Skype
© 2020 周 康
全站字数统计: