安卓日常问题杂谈(一)
背景
关于安卓开发中,有很多奇奇怪怪的问题,有时候这个控件闪一下,有时候这个页面移动一下,这些对于快速开发中,去查询,都是很耗费时间的,因此,本系列文章,旨在记录安卓开发过程中遇到的小问题,能快速解决问题。
开发环境
androidstudio
win10+
gradle4+
本文涉及知识
WebView
微信开放平台
MPAndroidChart
Dialog
PhotoView
gsyVideoPlayer
主体内容
WebView
(1)安卓在使用webview的页面中,进入页面后,webview在初始化中无故滑动。
原因是webview焦点引起的问题。解决方法:在webview的父布局,加上一下属性:
android:descendantFocusability="blocksDescendants"
微信开放平台
(1)微信打开的网页中,点击跳转到安卓APP失效问题,解决方法:
先配置好安卓的微信sdk链接
PS:注意安卓11和安卓13的适配,这里的链接中有。
值得一提的是,如果项目是直接继承三方的wx页面,如友盟的WXCallbackActivity。这个时候我们开发代码的过程,就区别于官方文档了。如果单单是处理微信中的网页跳转到APP指定页面,核心代码如下图:
@Overridepublic void onReq(BaseReq req) {LogUtil.d("onReq: " + req.getType());switch (req.getType()) {case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:break;case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:goToShowMsg((ShowMessageFromWX.Req) req);break;default:break;}super.onReq(req);}
从上面的代码中,可以看到,是直接重写onReq方法即可。这里我们在里面处理ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX这个指令就好了。至于sdk中 的extInfo怎样定义,得配合开发过程进行,不能一概而论。
MPAndroidChart(安卓图表库)
(1)折线图,初始化时,移动到指定的x,退出页面,内存泄漏
需要下载源码后,进行修改,修改方法如下:
(1-1)找到MoveViewJob类中的recycleInstance方法,增加下面的代码:
public static void recycleInstance(MoveViewJob instance){instance.mViewPortHandler = null;instance.mTrans = null;instance.view = null;pool.recycle(instance);}
(1-2)在调用跳转的过程中,使用方法moveViewToX进行调用即可
(2)取消当前选中的标签
直接调用API
chart.highlightValue(null)
Dialog
(1)通过定义基类的Dialog,进行封装生命周期,便于内存回收释放
很多业务中,都会用到dialog,有些甚至时在dialog里面做很多复杂的操作。
因此,业务中得到dialog的生命周期时非常重要,核心代码如下:
public abstract class BaseCustomDialog extends Dialog {public BaseCustomDialog(@NonNull Context context, int themeResId) {super(context, themeResId);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setOnShowListener(new OnShowListener() {@Overridepublic void onShow(DialogInterface dialog) {lifecycleStart();}});setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {lifecycleStop();}});}protected void initStyle() {try {Window window = getWindow();if (window != null) {window.getAttributes().windowAnimations = R.style.bottomShowAnimStyle;WindowManager.LayoutParams lp = window.getAttributes();lp.dimAmount = 0.1f; // 设置背景透明度(0.0完全透明,1.0完全不透明)window.setAttributes(lp);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);window.setStatusBarColor(Color.TRANSPARENT); // 设置状态栏颜色window.setNavigationBarColor(Color.TRANSPARENT); // 设置状态栏颜色}} catch (Exception e) {e.printStackTrace();}}protected void initFullLayout(){getWindow().getAttributes().width = ViewGroup.LayoutParams.MATCH_PARENT;getWindow().getAttributes().height = ViewGroup.LayoutParams.MATCH_PARENT;}protected void lifecycleStart() {}protected void lifecycleStop() {}}
上述代码,就是基类dialog的封装,对于子类调用,在方法lifecycleStart(),lifecycleStop()中进行内存的释放管理就可以了。
PhotoView(安卓图片预览控件)
(1)关于PhotoView初始化放大图片逻辑
这里要区分情况,看看你是放大width还是height。这里核心的要点,就是计算出放大的倍数,然后通过setScale方法,进行设计即可。核心代码如下:
ivFhrContent.setScaleLevels(scaleRate / 0.5 > 1 ? 1f : scaleRate / 0.5f, scaleRate, scaleRate * 2);ivFhrContent.setImageDrawable(resourceImage);LogUtil.d("scale: " + scaleRate);new Handler().postDelayed(() -> {ivFhrContent.setScale(scaleRate,0f,ivFhrContent.getHeight() / 2f,false);}, 0);
上述代码中,scaleRate就是放大的系数。
gsyVideoPlayer(安卓播放库)
(1)Https证书问题
核心代码如下:
ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {@Overridepublic MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {//如果返回 null,就使用默认的return null;}/*** 通过自定义的 HttpDataSource ,可以设置自签证书或者忽略证书* demo 里的 GSYExoHttpDataSourceFactory 使用的是忽略证书* */@Overridepublic HttpDataSource.BaseFactory getHttpDataSourceFactory(String userAgent,@Nullable TransferListener listener,int connectTimeoutMillis, int readTimeoutMillis,boolean allowCrossProtocolRedirects) {//如果返回 null,就使用默认的return new GSYExoHttpDataSourceFactory(userAgent, listener,connectTimeoutMillis,readTimeoutMillis, true);}});
上述设置,可以接受重定向以及播放HTTPS数据
相关文章:

安卓日常问题杂谈(一)
背景 关于安卓开发中,有很多奇奇怪怪的问题,有时候这个控件闪一下,有时候这个页面移动一下,这些对于快速开发中,去查询,都是很耗费时间的,因此,本系列文章,旨在记录安卓…...

Kitchen Racks 2
Kitchen Racks 2 吸盘置物架 Kitchen Racks-CSDN博客...
嵌入式学习笔记-杂七杂八
文章目录 连续波光纤耦合激光器工作原理主要特点应用领域设计考虑因素 数值孔径(Numerical Aperture,简称NA)数值孔径的定义数值孔径的意义数值孔径的计算示例数值孔径与光纤 四象限探测器检测目标方法四象限划分检测目标的步骤1. 数据采集2.…...

14-7C++STL的stack容器
(一)stack容器的入栈与出栈 (1)stack容器的简介 stack堆栈容器,“先进后出”的容器,且stack没有迭代器 (2)stack对象的默认构造 stack采用模板类实现,stack对象的默认…...
Vue 3 中的响应式系统:ref 与 reactive 的对比与应用
Vue 3 的响应式系统是其核心特性之一,它允许开发者以声明式的方式构建用户界面。Vue 3 引入了两种主要的响应式 API:ref 和 reactive。本文将详细介绍这两种 API 的用法、区别以及在修改对象属性和修改整个对象时的不同表现,并提供完整的代码…...

物业巡更系统助推社区管理智能化与服务模式创新的研究与应用
内容概要 在现代社区管理中,物业巡更系统扮演着至关重要的角色。首先,我们先来了解一下这个系统的概念与发展背景。物业巡更系统,顾名思义,是一个用来提升物业管理效率与服务质量的智能化工具。随着科技的发展,传统的…...
windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)
以下过程概述了配置文件驱动程序生成和发送蓝牙请求块 (BRB) 应遵循的一般流程。 BRB 是描述要执行的蓝牙操作的数据块。 生成和发送 BRB 分配 IRP。 分配BRB,请调用蓝牙驱动程序堆栈导出以供配置文件驱动程序使用的 BthAllocateBrb 函数。;初始化 BRB…...

Linux网络之序列化和反序列化
目录 序列化和反序列化 上期我们学习了基于TCP的socket套接字编程接口,并实现了一个TCP网络小程序,本期我们将在此基础上进一步延伸学习,实现一个网络版简单计算器。 序列化和反序列化 在生活中肯定有这样一个情景。 上图大家肯定不陌生&a…...

linux设置mysql远程连接
首先保证服务器开放了mysql的端口 然后输入 mysql -u root -p 输入密码后即可进入mysql 然后再 use mysql; select user,host from user; update user set host"%" where user"root"; flush privileges; 再执行 select user,host from user; 即可看到变…...
react-native网络调试工具Reactotron保姆级教程
在React Native开发过程中,调试和性能优化是至关重要的环节。今天,就来给大家分享一个非常强大的工具——Reactotron,它就像是一个贴心的助手,能帮助我们更轻松地追踪问题、优化性能。下面就是一份保姆级教程哦! 一、…...
erase() 【删数函数】的使用
**2025 - 01 - 25 - 第 48 篇 【函数的使用】 作者(Author) 文章目录 earse() - 删除函数一. vector中的 erase1 移除单个元素2 移除一段元素 二. map 中的erase1 通过键移除元素2 通过迭代器移除元素 earse() - 删除函数 一. vector中的 erase vector 是一个动态数组&#x…...
性能测试丨内存火焰图 Flame Graphs
内存火焰图的基本原理 内存火焰图是通过分析堆栈跟踪数据生成的一种图形化表现,能够展示应用程序在运行时各个函数的内存占用情况。火焰图的宽度代表了函数占用的内存量,而火焰的高度则显示了函数在调用栈中的层级关系。通过这种可视化方式,…...

AIGC的企业级解决方案架构及成本效益分析
AIGC的企业级解决方案架构及成本效益分析 一,企业级解决方案架构 AIGC(人工智能生成内容)的企业级解决方案架构是一个多层次、多维度的复杂系统,旨在帮助企业实现智能化转型和业务创新。以下是总结的企业级AIGC解决方案架构的主要组成部分: 1. 技术架构 企业级AIGC解决方…...

Linux 入门 常用指令 详细版
欢迎来到指令小仓库!! 宝剑锋从磨砺出,梅花香自苦寒来 什么是指令? 指令和可执行程序都是可以被执行的-->指令就是可执行程序。 指令一定是在系统的每一个位置存在的。 1.ls指令 语法: ls [选项][目…...

【R语言】流程控制
R语言中,常用的流程控制函数有:repeat、while、for、if…else、switch。 1、repeat循环 repeat函数经常与 break 语句或 next 语句一起使用。 repeat ({x <- sample(c(1:7),1)message("x ", x, ",你好吗?")if (x …...

猿人学第一题 js混淆源码乱码
首先检查刷新网络可知,m参数被加密,这是一个ajax请求 那么我们直接去定位该路径 定位成功 观察堆栈之后可以分析出来这应该是一个混淆,我们放到解码平台去还原一下 window["url"] "/api/match/1";request function…...

计算机组成原理(2)王道学习笔记
数据的表示和运算 提问:1.数据如何在计算机中表示? 2.运算器如何实现数据的算术、逻辑运算? 十进制计数法 古印度人发明了阿拉伯数字:0,1,2,3,4,5,6&#…...
【AI日记】25.01.26
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:自由宪章 律己 AI:6 小时作息:00:30-8:30短视频:大于 1 小时读书和写作&a…...

三. Redis 基本指令(Redis 快速入门-03)
三. Redis 基本指令(Redis 快速入门-03) 文章目录 三. Redis 基本指令(Redis 快速入门-03)1. Redis 基础操作:2. 对 key(键)操作:3. 对 DB(数据库)操作4. 最后: Reids 指定大全(指令文档): https://www.redis.net.cn/order/ Redis…...

设计模式的艺术-代理模式
结构性模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解代理模式 代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 代理模式类型较多…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...