美文网首页
春招笔记(十四)

春招笔记(十四)

作者: 松爱家的小秦 | 来源:发表于2019-03-12 17:17 被阅读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请求

    相关文章

      网友评论

          本文标题:春招笔记(十四)

          本文链接:https://www.haomeiwen.com/subject/adynpqtx.html