春招笔记(十四)

2019-03-12  本文已影响0人  松爱家的小秦

1.是否熟悉Android jni开发,jni如何调用java层代码

在Android开发中,使用 NDK开发的需求正逐渐增大

JNI:定义:Java Native Interface,即 Java本地接口

作用: 使得Java 与 本地其他类型语言(如C、C++)交互

即在 Java代码 里调用 C、C++等语言的代码 或 C、C++代码调用 Java 代码

为什么要有 JNI

背景:实际使用中,Java 需要与 本地代码 进行交互

问题:因为 Java 具备跨平台的特点,所以Java 与 本地代码交互的能力非常弱

解决方案: 采用 JNI特性 增强 Java 与 本地代码交互的能力

实现步骤

(1)在Java中声明Native方法(即需要调用的本地方法)

(2)编译上述 Java源文件javac(得到 .class文件)

(3)通过 javah 命令导出JNI的头文件(.h文件)

(4)使用 Java需要交互的本地代码 实现在 Java中声明的Native方法

        如 Java 需要与 C++ 交互,那么就用C++实现 Java的Native方法

(5)编译.so库文件

(6)通过Java命令执行 Java程序,最终实现Java调用本地代码

2.SurfaceView

为什么要使用SurfaceView来实现动画? 

因为View的绘图存在以下缺陷:

View缺乏双缓冲机制

当程序需要更新View上的图像时,程序必须重绘View上显示的整张图片

新线程无法直接更新View组件

SurfaceView的绘图机制

一般会与SurfaceView结合使用

调用SurfaceView的getHolder()方法即可获得SurfaceView关联的SurfaceHolder

SurfaceHolder提供了如下方法来获取Canvas对象

Canvas lockCanvas():锁定整个SurfaceView对象,获取该Surface上的Canvas

Canvas lockCanvas(Rect dirty):锁定SurfaceView上Rect划分的区域,获取该Surface上的Canvas

unlockCanvasAndPost(canvas):释放绘图、提交所绘制的图形,需要注意,当调用SurfaceHolder上的unlockCanvasAndPost方法之后,该方法之前所绘制的图形还处于缓冲之中,下一次lockCanvas()方法锁定的区域可能会“遮挡”它

3.NDK

Native Development Kit,是 Android的一个工具开发包

NDK是属于 Android 的,与Java并无直接关系

作用:快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK

即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互

应用场景:在Android的场景下 使用JNI

即 Android开发的功能需要本地代码(C/C++)实现

NDK与JNI的关系:

http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/overview.html

4.Retrofit2 

Retrofit是什么

简单的说它是一个基于OkHttp的RESTFUL Api请求工具,从功能上来说和Google的Volley功能上很相似,但是使用上很不相似。

Retrofit可以让你简单到调用一个Java方法的方式去请求一个api

Retrofit只要创建一个接口来描述Http请求,然后可以让我们可以像调用Java方法一样请求一个Api

Retrofit的原理

Java的动态代理

动态代理是个什么东西?

看Retrofit代码之前我知道Java动态代理是一个很重要的东西,比如在Spring框架里大量的用到,但是它有什么用呢?

Java动态代理就是给了程序员一种可能:当你要调用某个Class的方法前或后,插入你想要执行的代码

Retrofit非常巧妙的用注解来描述一个HTTP请求,将一个HTTP请求抽象成一个Java接口,然后用了Java动态代理的方式,动态的将这个接口的注解“翻译”成一个HTTP请求,最后再执行这个HTTP请求

上一篇下一篇

猜你喜欢

热点阅读