通过Surface获取ANativeWindow
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Surface获取ANativeWindow相关的知识,希望对你有一定的参考价值。
参考技术A 每一种操作系统都定义了自己的窗口系统,而 ANativeWindow 就是 android 的本地窗口,在 Android Java 层,Surface 又继承于 ANativeWindow ,实际上 Surface 是 ANativeWindow 的具体实现,所以一个 ANativeWindow 表示的就是一块屏幕缓冲区。我们要渲染一帧图像,只需要将图像数据刷进 ANativeWindow 所表示的屏幕缓冲区即可。
ANativeWindow的使用步骤大致如下:
那 ANativeWindow 和java的 Surface 是什么关系呢?为什么可以通过 ANativeWindow_fromSurface(env, surface); 得到 ANativeWindow
源码中查找发现 native_window.cpp 中调用了`android_view_Surface_getNativeWindow(env, surface);
可知就是通过获取 android.view.Surface 这个class中的 mNativeObject 属性获得到。查看Surface.java中 mNativeObject 的赋值操作只有在:
而调用这个方法的都在构造方法或者状态恢复方法中。所以我们明白mNativeObject存储的其实就是一块内存地址,而通过这个内存地址可以直接强转获取到 ANativeWindow 的地址指针。
关于java使用long存储地址可以查看 JNI中用long传递指针到java
surface 通过U盘 镜像恢复系统
1. 在恢复之前首先要解锁bitlocker(如果你的surface没有加锁就不需要这个步骤)
在另一台电脑上登录bitlocker锁绑定的微软账号,查询密钥,在需要的地方输入这个密钥(不经过这个操作无法进行镜像恢复,这是surface的安全措施)
2. 从官网上下载镜像文件,需要知道产品号,可以从surface机子后面找到
https://support.microsoft.com/zh-cn/surfacerecoveryimage
选择在不登录的情况下继续
输入序列号后就可以下载镜像。
3. 镜像下载好后把镜像文件解压到硬盘里,然后把解压后的所有文件复制到一个空的FAT32格式的优盘里,也可以直接把镜像文件解压到FAT32的优盘里。
4. 镜像恢复操作,以下是官方邮件步骤,和我做的时候略有不同,根据情况处理。
步骤 1:
确保 Surface 已关闭并接通电源。(u盘的格式:fat32格式、)
步骤 2:
将 USB 恢复驱动器插入 Surface 上的 USB 端口。
步骤 3:
按住音量减小按钮,同时按下并释放 Surface 上的电源按钮。
步骤 4:
当显示 Surface 徽标时,释放音量按钮。
步骤 5:
看到提示后,选择所需的语言和键盘布局。Usb engry for windows to go usb drive
步骤 6:
点击或单击“疑难解答”,然后点击或单击“重置电脑”(但是我基本上遇到的客户都没有这个选项,一般选择“初始化电脑”)
步骤 7:
如果提示输入恢复密钥,点击或单击屏幕底部的“跳过这个驱动器”。
步骤 8:
点击或单击要重置的目标操作系统。这指的是 Surface 上当前安装的操作系统。
步骤 9:
点击或单击“是,对驱动器重新分区”。在下一页中,点击或单击“下一步”。
步骤 10:
选择“仅删除我的文件”或“完全清理驱动器”。
清理驱动器的选项更安全,但耗时也较长。例如,如果您要回收 Surface,则应该选择清理驱动器。如果您要保留 Surface,则只需删除文件。
步骤 11:
点击或单击“重置”。
Surface 会重新启动,当重置过程继续时将显示 Surface 徽标(这可能需要几分钟)。
参考资料:http://tieba.baidu.com/p/5019517437?traceid=
以上是关于通过Surface获取ANativeWindow的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MediaCodec 编码器和 CameraX 之间共享 Surface