sunwengang blog

developer | android display/graphics

Android 触控事件分析

我们常见的触摸事件除了按下,弹起,移动之外还有很多,诸如长按,双击,Scroll,Fling等,他们是怎么判断的,还有这些长按,双击等事件的时间能否自由设置。可以在开发者选项中打开“显示点按操作反馈”和“指针位置”,同时可以打开inputflinger模块的log开关做一些调试,分析TP报点。 一般当我们需要处理触摸事件时有两种方式: 委托式 : 将事件委托给监听器来进行处理。即定义一个View.onTouchListener()子类的监听器,由其onTouch()方法来处理。 回调式 : 通过重写View类自己的onTouchEvent()方法来处理,在执行时会回调该方法,在其中执行自定义的代码。 阅读全文

Android Systrace如何抓取分析问题

UI流畅平滑的systraceSystrace获取:Android\Sdk\platform-tools\systrace systrace.py:python systrace.py --time=10 -o trace.html gfx input view webview wm am sm audio video hal res dalvik bionic power pm ss pdx sched freq idle load binder_driver binder_lock 默认Tag with: sched freq idle res ss gfx input view am 阅读全文

Android LCD背光驱动节电技术LABC/CABC

LCD背光驱动节电技术LABC/CABC 手机屏幕大部分是LCD(还有OLED屏幕),而手机的部分电量就是LCD背光消耗的。随着分辨率/尺寸的增大,LCD的背光驱动电路也越来越复杂。而高分辨率、高显示颜色、大尺寸的LCD,需要大的背光系统、大的TFT-LCD 面版、高运算速度的驱动IC,这些都造成了高的功率消耗。主要了解一下背光驱动节电技术CABC的概念和功能。参考博客 阅读全文

Android Binder实例

Binder通信是Android用的比较多的一种通信机制,它是一种client-server的通信结构。Binder通信具有以下特点: 用驱动程序来推进进程间的通信; 可以通过共享内存的方式来提供性能; 可以为进程请求分配每个进程的线程池; 针对系统中的对象引入了引用计数和跨进程的对象引用映射; 可以方便的进行进程同步调用。 阅读全文

Android @hide接口注释

@hide和{@hide}类或API是否开放是通过doc的注释{@hide}来控制的 比如android.media.Metadata这个类就是android没有公开的类 因为在frameworks\base\media\libmedia\Metadata.java文件中,定义Metadata类之前有/*{@hide}/doc注释,所以Metadata类被定义为了非公开类,即在android应用程序中无法直接访问的类 阅读全文

Android色彩空间(ColorSpace)

色彩空间Color Space广色域WCGWCG(Wide Color Gamut),是Adobe System开发的一种RGB色彩空间,使用纯光谱原色提供较大的色域。与Adove RGB和sRGB相比,能够存储更大范围的颜色值。相比之下,WCG包含CIELAB色彩空间可见颜色的77.6%,而Adobe RGB色彩空间仅覆盖52.1%,sRGB仅覆盖35.9%。 阅读全文

Java 单例模式

单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例。比如我们在系统启动时,需要加载一些公共的配置信息,对整个应用程序的整个生命周期中都可见且唯一,这时需要设计成单例模式。如:spring容器,session工厂,缓存,数据库连接池等等。 阅读全文

Android Property

property的相关生成文件和设置 android通过SystemProperties的set和get方法来控制很多东西,一般上层添加一个控制开关可以使用这个方法,在系统里面存在很多个prop文件。它们分别是system/build.prop,system/etc/prop.default,vendor/build.prop,vendor/default.prop。下面分别来说下这几个文件的构成。 阅读全文

nReal搭建Samepl APK

概述nrsdk是nreal开发混合现实体验的平台。使用简单的开发过程和高级api,nrsdk提供了一组强大的mr特性,并使nreal眼镜能够了解真实世界。 nrsdk为开发者提供了五个核心特性: 空间计算使眼镜能够跟踪它们相对于世界的实时位置,并了解周围的环境,例如检测和跟踪平面和图像。 优化的渲染自动应用于应用程序并在后端运行,以最小化延迟并减少抖动,增强总体用户体验。 多模态交互为不同的用例提供了交互的直观选择。 提供了开发工具,以便您可以更好地开发和调试应用程序。 第三方集成是通过为第三方sdk提供数据来实现的,这允许您充分利用nreal light的硬件功能并构建功能强大的mr/ar应用程序。 阅读全文

Android Handler消息循环处理机制(例ActivityThread)

整体流程 关键词:Handler、Looper、MessageQueue、handleMessage 消息被存放于消息队列,应用程序的主线程会围绕这个消息队列进入一个无限循环,知道应用程序退出。(消息循环过程是由Looper实现的) 如果队列中有消息,应用程序的主线程会把它取出来,分发给相应的Handler进行处理; 如果队列中没有消息,应用程序的主县城就会进入空闲等待状态,等待下一个消息的到来; 阅读全文

Android WMS和View基本理解

概述 Window 可以看做是Surface的一个包装,本质上,Window的本体就是一片Surface。将操作对象Surface,对象关联属性集以及操作方法等组合在一起便是 Window。Surface 其实是一块画布,应用可以随心所欲地通过 Canvas 或者 OpenGL 在其上作画,然后通过 SurfaceFlinger 将多块 Surface 的内容按照特定的顺序(ZOrder)进行混合并输出到 FrameBuffer,从而将 Android 漂亮的脸蛋显示给用户。既然每个窗口都有一块 Surface 供自己涂鸦,所以必然需要一个角色对所有窗口的 Surface 进行协调管理。于是,WMS 应运而生。 代码: http://aosp.opersys.com/xref/android-10.0.0_r2/xref/frameworks/base/core/java/android/view/ 阅读全文

C++ 运算符重载、友元、返回对象

运算符重载运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。 例如* 用于地址,将获得存储在这个地址中的值;而用于两个数字之间,得到的是乘积。 阅读全文

Android zygote和SystemServer进程

zygote和system_server在Android中的Java层很重要。 zygote分析 zygote由init进程根据init.rc的配置项创建的。最初叫app_process,但是在运行过程中,通过Linux的pctrl系统调用将其换成了zygote。通过adb shell ps -ef|grep zygote查看到该进程。 阅读全文

Android init进程

概述 init是Linux系统中用户空间的第一个进程。通过adb shell ps -rf查看我的一加手机进程信息。 12UID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:43:34 ? 00:00:10 init init进程负责创建系统中的几个关键进程,例如zygote init提供了一个property service(属性服务)来管理Android系统的众多属性 阅读全文

C++对象和类

类型指定基本类型完成了三项工作: 决定数据对象需要的内存数量 决定如何解释内存中的位(long和float所占位数相同,但是将他们转换成数值的方法不同) 决定可使用数据对象执行的操作和方法 阅读全文