春招笔记(十四)
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请求