
Android
文章平均质量分 69
Android
进击的小宇宙
用十倍苦心,做突出一个。
展开
-
自定义Android截屏命令
一、 背景在日常开发中,我们有时需要对手机截屏,并拷出到电脑中,常规的做法有这些:手机截屏,通过adb命令或IDE的文件管理,将截图文件拷贝到电脑手机截屏,通过即时通讯软件发送到电脑上的客户端本文的目的,便是解决以上繁琐的流程,只需要一个命令,便完成截图、拷贝两件事。二、 方案1. 实现shell脚本这里以我个人的Mac为例:创建一个名为Custom的文件夹,统一存放自定义脚本,以便今后新增文件mkdir /Applications/Custom创建一个名为cap.sh的原创 2021-08-05 16:48:02 · 1249 阅读 · 0 评论 -
企鹅电竞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 · 2676 阅读 · 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 · 2733 阅读 · 0 评论 -
Android O之前Animator的isRunning判断错误的问题
又是SDK的坑。原创 2021-04-20 19:44:50 · 1501 阅读 · 0 评论 -
Android M之前View实例化时报访问成员变量空指针的问题
写了四年安卓,我发现我根本不懂Java。原创 2021-04-20 19:42:33 · 1211 阅读 · 0 评论 -
Android手势拦补点
一、 前言在Android日常开发中,我们时有处理业务中手势的需求,即:基于事件的拦截、分发、消费三个回调,判断手势逻辑。我们知道,当一个View消费了ACTION_DOWN事件,才可以接受到后续的事件,反之无法收到后续事件。那么如果一个View消费了事件后,判断为自己不需要的事件,又想将事件重新传递给子View处理怎么办呢?这就引出了本文的要点——手势拦补点操作,以Android Q为例,进行介绍。二、 拦点1. 什么是拦点拦点,即拦截触摸事件点位,不让事件向下传递。这并非我们常规的onIn原创 2021-01-28 09:44:28 · 1417 阅读 · 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 · 2581 阅读 · 0 评论 -
OpenGL OOM的解决方案
本文介绍使用OpenGL后引起OOM的一些解决方案。原创 2020-07-24 22:08:45 · 8507 阅读 · 1 评论 -
AOSP升级codebase疑难总结
本文讲述笔者在升级codebase时遇到的一些疑难问题和解决思路。原创 2020-04-04 19:20:24 · 1449 阅读 · 0 评论 -
AOSP解耦独立应用总结
本文基于Android Q,介绍将AOSP中的仓库解耦为独立应用时的一些疑难点。原创 2020-03-30 08:43:45 · 1689 阅读 · 0 评论 -
Android动态快捷方式兼容性问题
本文基于Android Q,通过介绍笔者工作中翻过的一次车,讲述Android中的动态快捷方式兼容性处理注意事项。原创 2020-03-30 08:35:05 · 1174 阅读 · 0 评论 -
Android多用户原理及流程分析
本文基于Android Q,介绍多用户基本原理和流程。原创 2020-03-18 16:56:18 · 5280 阅读 · 0 评论 -
Android多用户适配
本文基于Android Q,介绍安卓原生的多用户功能适配相关内容,供开发者学习参考。原创 2020-01-18 12:10:28 · 4370 阅读 · 0 评论 -
Android性能优化之内存优化——内存泄漏篇
Android性能优化之内存优化——内存泄漏篇一、 简介内存泄露(Memory Leak)简单来说,就是该释放或回收的资源没有主动去释放或回收,导致GC也无法回收,最后永远无法正常回收,造成系统资源浪费。内存泄露会积累放大影响,严重时会导致内存溢出,引起程序卡死崩溃等。和内存泄露有关的常见场景如下:非静态内部类匿名内部类BroadcastReceiverContentObserve...原创 2020-01-14 23:26:57 · 2169 阅读 · 0 评论 -
Android性能优化之内存优化
本章内容基于Android Q,介绍Android性能优化中的内存优化方面,通过排查、检测、规避和表现等四个方面的讲解,让更多的开发者有能力去改善或设计出更优质的程序。内容大纲包括:内存泄漏篇内存溢出篇内存抖动篇内存检测工具篇内存问题规避篇内存问题表现篇下面将分为以上几节内容进行介绍。...原创 2020-01-14 23:21:48 · 159 阅读 · 0 评论 -
WindowManager操作View源码分析
本文通过源码分析WindowManager的几个重要的操作View的方法:`addView`,`removeView`,`updateViewLayout`等,以及它们隐含的一些风险项。原创 2019-10-03 18:04:57 · 647 阅读 · 0 评论 -
RecyclerView使用SpanSizeLookup设置Item占位
本文介绍使用栅栏布局管理器的抽象内部类SpanSizeLookup实现Item占位多行或多列的方法。原创 2019-08-14 11:46:42 · 2923 阅读 · 0 评论 -
RecyclerView使用ItemDecoration绘制分割线
本文介绍使用RecyclerView的抽象内部类ItemDecoration实现ItemView分割线的绘制。原创 2019-07-25 16:49:55 · 2100 阅读 · 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 · 532 阅读 · 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 · 631 阅读 · 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 · 4487 阅读 · 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 · 2427 阅读 · 0 评论 -
Android进程间通信之AIDL
一、 摘要本文介绍Android中的IPC方式之一——AIDL。二、 关于AIDLAIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Rem...原创 2019-01-08 15:14:54 · 419 阅读 · 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 · 313 阅读 · 0 评论 -
adb调试时报"error:insufficient permissions for device"的解决方案
一、 问题日志zengyu@zengyu-Precision-T1700:~/private/master$ adb rooterror: insufficient permissions for device二、 问题原因没有在设备管理器中注册该Android设备。三、 解决方案参考我的另一篇文章:Ubuntu下注册Android设备...原创 2018-12-06 09:49:19 · 966 阅读 · 0 评论 -
Android中singleInstance和taskAffinity的优先级
Abstract我们知道,singleInstance会让新建的activity实例放进新的task栈中,而taskAffinity又可以通过指定task栈来实现将activity实例放入指定task栈中,本文主要通过四个实例,对singleInstance和taskAffinity进行交叉对比,说明singleInstance和taskAffinity的优先级。Case 1LaunchM...原创 2018-10-10 14:56:25 · 1768 阅读 · 1 评论 -
使用adb修改手机hosts文件
一、 教程获取root权限adb root重新挂载为可读可写设备adb remount将原hosts文件拷到本地本地先创建一个空文件,然后再把手机中的hosts拷贝到该文件中。touch <local file> && adb pull /system/etc/hosts <local file>修原创 2018-09-26 14:45:42 · 24058 阅读 · 1 评论 -
Ubuntu下注册Android设备
1. 查看串口信息打开终端,输入命令”lsusb”:zengyu@zengyu-Precision-T1700:~$ lsusbBus 002 Device 003: ID 0bda:0184 Realtek Semiconductor Corp. RTS5182 Card ReaderBus 002 Device 002: ID 8087:8000 Intel Corp. Bus ...原创 2018-09-11 16:44:49 · 739 阅读 · 0 评论 -
Android获取接口调用者的包名
一、 摘要对外部应用提供的Service或AIDL之类的接口,我们想知道是谁调用了这个方法,因此需要获取调用者包名。二、 方法示例简单版方法:适用于第三方应用String invokerPkg = getPackageManager().getNameForUid(Binder.getCallingUid());该方法如果用于获取系统级应用的话,返回的不是真实包名而是”...原创 2018-09-06 11:01:14 · 9244 阅读 · 3 评论 -
Android Studio编译AIDL文件时报"finished with non-zero exit value 1"错误的解决方案
一、 错误日志修改AIDL中的方法入参后出现以下编译错误:Process 'command '/home/zengyu/Android/Sdk/build-tools/26.0.3/aidl'' finished with non-zero exit value 1二、 问题原因AIDL不支持方法重载,编译时以方法名为标识在对应java文件中生成方法,所以修改AIDL中的方法入...原创 2018-08-14 18:02:04 · 1308 阅读 · 0 评论 -
Android代码混淆时报错"transformClassesAndResourcesWithProguardForRelease"的解决方案
一、 问题日志run task中:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':xxxx:transformClassesAndResourcesWithProguardForRelease'.compiler中:Warning: there were 4 instances...原创 2018-08-07 10:43:32 · 6133 阅读 · 0 评论 -
Android使用MediaRecorder的stop方法报"stop failed"错误的解决方案
一、 问题描述如下所示,调用recorder.stop()时抛出异常:Caused by: java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)二、 分析原因start和stop间隔时间太短: 三、 解决方案调用stop...原创 2018-07-26 19:14:45 · 15018 阅读 · 3 评论 -
Android获取屏幕宽高
一、 前言android 4.4(sdk 19)之后,获取屏幕高度需要考虑底部导航栏等decor。网上很多方案是没有考虑这一点的,因此获取到的屏幕高度小于实际高度,误导开发者。二、 错误方案列举几种常见的获取出来高度可能小于实际高度的方案:1.DisplayMetrics dm = getApplicationContext().getResources().getDisp...原创 2018-07-10 17:26:58 · 6427 阅读 · 1 评论 -
AS启动时报"Please check your firewall settings and restart Android Studio"的解决方案
一、 摘要Android Studio启动时报”Please check your firewall settings and restart Android Studio”的解决方案。二、 问题日志Cannot start internal HTTP server. Git integration, JavaScript debugger and LiveEdit may o...原创 2018-02-26 21:44:23 · 2444 阅读 · 0 评论 -
Android校招面试知识点整理
前言本来应该在秋招结束时就将整理出来的知识点发布博客的,结果忘了。好在现在不算晚,给春招的同学一点参考。一、 Activity1. lifecycleonCreateonStartonResumeonPauseonStoponDestroyonRestart2. launchModeStandardSingleTopSingleTask...原创 2018-02-07 23:36:31 · 397 阅读 · 0 评论 -
Android四种常用的消息传递机制/模式的比较
四种分别是callback interface,handler-message,broadcast receiver和observer-subject。1. callback interface这种消息传递的方式,需要在接收方调用发送方的方法或者在创建实例时,将回调接口传入,并在接收方实现接口方法。 举例: 定义一个回调接口:public interface ITest{...原创 2017-07-07 18:51:52 · 5283 阅读 · 1 评论