Android进阶之路
文章平均质量分 79
分享一些Android开发过程中的技术心得。
进击的小宇宙
用十倍苦心,做突出一个。
展开
-
企鹅电竞VAP动画组件停留最后一帧画面
一、 简介VAP(Video Animation Player)是企鹅电竞开发的一款用于播放视频动画的组件库,其开源于:腾讯工蜂:https://git.code.tencent.com/Tencent_Open_Source/vapGithub:https://github.com/Tencent/vap二、 问题现状VAP播放动画采用的TextureView方式来提供Surface展示画面,在播放视频结束后,会清空动画画面,如果我们有需求需要让动画停留在画面最后一帧,当前是不支持的,跟V原创 2021-05-17 18:50:24 · 2546 阅读 · 1 评论 -
基于GLSurfaceView的视频播放器偶现无画面的问题分析
文章目录一、 问题背景二、 逐步排查2.1 增加log,复现问题2.2 查看ijkplayer源码2.3 查看AOSP源码三、 分析原因3.1 Renderer回调onSurfaceCreated3.2 Player回调onPrepared3.3 总结四、 解决方案4.1 串行4.2 并行五、 反思总结一、 问题背景博主所在项目中,涉及到视频动画播放功能,其实现方案采用的是bilibili开源项目ijkplayer播放器+GLSurfaceView+自定义渲染器:ijkplayer提供视频解码能力,原创 2021-04-28 21:05:09 · 2593 阅读 · 0 评论 -
Android手势拦补点
一、 前言在Android日常开发中,我们时有处理业务中手势的需求,即:基于事件的拦截、分发、消费三个回调,判断手势逻辑。我们知道,当一个View消费了ACTION_DOWN事件,才可以接受到后续的事件,反之无法收到后续事件。那么如果一个View消费了事件后,判断为自己不需要的事件,又想将事件重新传递给子View处理怎么办呢?这就引出了本文的要点——手势拦补点操作,以Android Q为例,进行介绍。二、 拦点1. 什么是拦点拦点,即拦截触摸事件点位,不让事件向下传递。这并非我们常规的onIn原创 2021-01-28 09:44:28 · 1344 阅读 · 0 评论 -
TextView自定义长按菜单
一、 实现方式安卓原生的长按菜单,支持自定义菜单内容及事件,只需要两步设置便可快速实现:val tvDemo: TextView// 设置为可选中的,其内部会让控件支持长按tvDemo.setTextIsSelectable(true)tvDemo.customSelectionActionModeCallback = object : ActionMode.Callback { override fun onCreateActionMode(mode: ActionMode?, menu原创 2020-12-24 11:32:29 · 2448 阅读 · 0 评论 -
OpenGL OOM的解决方案
本文介绍使用OpenGL后引起OOM的一些解决方案。原创 2020-07-24 22:08:45 · 8149 阅读 · 1 评论 -
AOSP升级codebase疑难总结
本文讲述笔者在升级codebase时遇到的一些疑难问题和解决思路。原创 2020-04-04 19:20:24 · 1390 阅读 · 0 评论 -
AOSP解耦独立应用总结
本文基于Android Q,介绍将AOSP中的仓库解耦为独立应用时的一些疑难点。原创 2020-03-30 08:43:45 · 1594 阅读 · 0 评论 -
Android动态快捷方式兼容性问题
本文基于Android Q,通过介绍笔者工作中翻过的一次车,讲述Android中的动态快捷方式兼容性处理注意事项。原创 2020-03-30 08:35:05 · 1114 阅读 · 0 评论 -
Android多用户原理及流程分析
本文基于Android Q,介绍多用户基本原理和流程。原创 2020-03-18 16:56:18 · 4955 阅读 · 0 评论 -
Android多用户适配
本文基于Android Q,介绍安卓原生的多用户功能适配相关内容,供开发者学习参考。原创 2020-01-18 12:10:28 · 4238 阅读 · 0 评论 -
WindowManager操作View源码分析
本文通过源码分析WindowManager的几个重要的操作View的方法:`addView`,`removeView`,`updateViewLayout`等,以及它们隐含的一些风险项。原创 2019-10-03 18:04:57 · 606 阅读 · 0 评论 -
RecyclerView使用SpanSizeLookup设置Item占位
本文介绍使用栅栏布局管理器的抽象内部类SpanSizeLookup实现Item占位多行或多列的方法。原创 2019-08-14 11:46:42 · 2827 阅读 · 0 评论 -
RecyclerView使用ItemDecoration绘制分割线
本文介绍使用RecyclerView的抽象内部类ItemDecoration实现ItemView分割线的绘制。原创 2019-07-25 16:49:55 · 2058 阅读 · 0 评论 -
Android中View的事件分发
一、 摘要介绍Android中View的事件分发流程,以及对事件的消费和拦截。本文基于Android 8.0(Oreo),即API 26。二、 View的事件View有四种基本事件,它们位于MotionEvent中:ACTION_DOWN:按压动作开始的标志,事件中包含这个初始位置。ACTION_UP:按压结束的标志,事件中包含这个结束位置。ACTION_MOVE:按压松开之前的状...原创 2019-01-16 17:47:51 · 498 阅读 · 1 评论 -
Android中View的异步消息
一、 摘要介绍Android中View的异步消息,以及消息传递流程。二、 分析View.post()说起View的异步消息,也就是View.post()这个方法,它常用于在主线程更新UI,我们要搞清楚它的具体实现,先来看看post()的源码(postDelayed()原理相同,因此不再单独讲解):/** * <p>Causes the Runnable to be adde...原创 2019-01-14 11:34:56 · 585 阅读 · 0 评论 -
Android中View的绘制流程
一、 摘要介绍Android View的绘制流程,引出后续的异步消息、事件分发。二、 ViewRootImpl1. ViewRootImpl是什么在API文档中如此描述ViewRootImpl:/** * The top of a view hierarchy, implementing the needed protocol between View * and the Wind...原创 2019-01-11 15:21:10 · 4436 阅读 · 3 评论 -
Android动态创建快捷方式
一、 摘要以Android O为分界,介绍两种动态创建快捷方式的途径:广播和ShortcutManager。二、 Android O以前在Android O(8.0)以前,动态创建快捷方式是通过发送广播实现的:// 由该action可知,我们的创建快捷方式广播会由launcher,也就是系统桌面来接收public static final String ACTION_INSTALL_S...原创 2019-01-08 16:51:44 · 2311 阅读 · 0 评论 -
Android进程间通信之AIDL
一、 摘要本文介绍Android中的IPC方式之一——AIDL。二、 关于AIDLAIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Rem...原创 2019-01-08 15:14:54 · 390 阅读 · 0 评论 -
Android进程间通信之Messenger
一、 摘要本文介绍Android中的IPC方式之一——Messenger。二、 关于MessengerSDK中如此描述:/** * Reference to a Handler, which others can use to send messages to it. * This allows for the implementation of message-based comm...原创 2019-01-08 11:08:13 · 283 阅读 · 0 评论 -
Android中singleInstance和taskAffinity的优先级
Abstract我们知道,singleInstance会让新建的activity实例放进新的task栈中,而taskAffinity又可以通过指定task栈来实现将activity实例放入指定task栈中,本文主要通过四个实例,对singleInstance和taskAffinity进行交叉对比,说明singleInstance和taskAffinity的优先级。Case 1LaunchM...原创 2018-10-10 14:56:25 · 1734 阅读 · 1 评论 -
Android获取接口调用者的包名
一、 摘要对外部应用提供的Service或AIDL之类的接口,我们想知道是谁调用了这个方法,因此需要获取调用者包名。二、 方法示例简单版方法:适用于第三方应用String invokerPkg = getPackageManager().getNameForUid(Binder.getCallingUid());该方法如果用于获取系统级应用的话,返回的不是真实包名而是”...原创 2018-09-06 11:01:14 · 8819 阅读 · 3 评论 -
Android获取屏幕宽高
一、 前言android 4.4(sdk 19)之后,获取屏幕高度需要考虑底部导航栏等decor。网上很多方案是没有考虑这一点的,因此获取到的屏幕高度小于实际高度,误导开发者。二、 错误方案列举几种常见的获取出来高度可能小于实际高度的方案:1.DisplayMetrics dm = getApplicationContext().getResources().getDisp...原创 2018-07-10 17:26:58 · 6337 阅读 · 1 评论 -
Android校招面试知识点整理
前言本来应该在秋招结束时就将整理出来的知识点发布博客的,结果忘了。好在现在不算晚,给春招的同学一点参考。一、 Activity1. lifecycleonCreateonStartonResumeonPauseonStoponDestroyonRestart2. launchModeStandardSingleTopSingleTask...原创 2018-02-07 23:36:31 · 361 阅读 · 0 评论 -
Android四种常用的消息传递机制/模式的比较
四种分别是callback interface,handler-message,broadcast receiver和observer-subject。1. callback interface这种消息传递的方式,需要在接收方调用发送方的方法或者在创建实例时,将回调接口传入,并在接收方实现接口方法。 举例: 定义一个回调接口:public interface ITest{...原创 2017-07-07 18:51:52 · 5228 阅读 · 1 评论