Android - 开发问题
文章平均质量分 55
Android开发过程中遇到问题分享
孔小乐
这个作者很懒,什么都没留下…
展开
-
MemoryAnalyzer(mat)安装报错:version1.8.0 of the jvm is not suitable for this product
3、配置完成后,还要修改下MemoryAnalyzer.ini这个配置文件,打开后加入下面语句,第二行是你的jdk安装路径,到bin这一级就够了。4、点击MemoryAnalyzer.exe可启动MAT分析工具。大家可以根据自己的系统选择版本,点击安装下。原创 2023-12-04 10:35:07 · 3613 阅读 · 5 评论 -
Android - kts文件配置应用签名
升级最新的AndroidStudio后,gradle配置文件从Groovy 迁移到 KTS,这里把自己配置应用签名遇到的问题及注意事项分享下。Google官方说明地址。原创 2023-09-26 16:11:34 · 2802 阅读 · 0 评论 -
Android - Handler使用问题总结
调用后直接终止Looper,不在处理任何Message,所有尝试把Message放进消息队列的操作都会失败,比如Handler.sendMessage()会返回 false,但是存在不安全性,因为有可能有Message还在消息队列中没来的及处理就终止Looper了。从打印可以看到,loop()后的log没有打印,因为现在Looper处于一直循环处理消息的状态,这就意味着这个Looper一直处于一个阻塞状态。的时候,默认使用的是当前线程的Looper,就是系统为我们创建好的。给移除掉了,所以不会执行。原创 2023-09-25 11:12:09 · 477 阅读 · 0 评论 -
Android - Monkey 测试应用出现Crash报错IllegalStateException
在逻辑中先判断当前是否处于Monkey测试,如果处于Monkey,不执行Lottie动画会crash的方法。平时使用Lottie动画都是正常的,没出过这个crash问题,看下的报错信息,代码总文件夹也设置了。目前没有找到正面解决的方法,如有更好的方法可以评论区留言。原创 2023-09-22 18:29:20 · 633 阅读 · 0 评论 -
AS配置签名报错:The apk for your currently selected variant (Unknown output) is not signed
在Project Structure下,选中Build Variants对app的release版本的签名再重新选择下。这里Android studio 没有给自动配置。原创 2023-08-17 11:12:46 · 249 阅读 · 0 评论 -
Android 广播阻塞、延迟问题分析方法
关键字,在第三步分析在#104的时候出现了问题,从第二步可以看到#104出现在Line 10078行,然后在过滤出的dispatch的信息中,找到10078行,然后往下找,找到第一个时间比较长的广播,从下面log看,应该是Line 10132行的广播堵塞了,返回a.txt文件可以找到对应的广播信息。5、找到堵塞的广播后,以该广播为关键字在a.txt文件中再次进行筛选,可找到注册该广播的包名,进而可以找到堵塞的进程和应用。2、然后,根据自己堵塞的广播名称在a.txt文件进行过滤,如下代码所示,有三次发送。原创 2023-08-10 19:58:21 · 1407 阅读 · 0 评论 -
AndroidStudio No tests found for given includes: [***Test](filter.includeTestsMatching)
后面去同事那看了一样发现人家运行正常,xShell运行测试命令看了下报错,好像是jdk里找不到类,然后问了下同事用的是JDK1.8,我这边是JDK11,切换JDK版本后可解决该问题。今天写测试用例,报标题错误,看了下面参考文章,他的问题是Junit版本不对,但是我的就是Junit4.12。原创 2023-06-09 10:58:00 · 416 阅读 · 0 评论 -
Android 单元测试问题总结(Robolectric+JUnit)
问题原因:检查下是不是使用了PowerMock,自测使用PowerMock后Shadow不生效解决办法:去掉PowerMock改用Mockito试试,或者第三方依赖都换成Shadow,我这也没啥好的方法。原创 2023-03-10 11:24:36 · 682 阅读 · 1 评论 -
Android - Execution failed for JetifyTransform
如果您认为这个库不需要被jetified(例如,如果它已经支持AndroidX,或者它没有使用support库或者AndroidX),请添加android.jetifier.blacklist ={不想被jetifid的sdk列表名称,并用逗号进行分割开}属性到gradle.properties文件中。:在项目的gradle.properties文件中加入下面代码,多个jar间用逗号隔开。原创 2022-12-21 11:02:38 · 1266 阅读 · 0 评论 -
MPAndroidChart-折线图 数据分段显示 ,无数据的地方断开
绘制线条的核心源码如下,通过调试发现,之所以无法绘制的原因是mLineBuffer 太大了,而且滑动的话遍历打印里面的值会变成非法值INFINITY,导致后面drawLines的时候无法绘制,我这边直接限制了mLineBuffer 这个变量的大小,核心代码:mLineBuffer = new float[(mXBounds.range + 2) * 4];例如:【20,30,0,35,45,0,0,35】这个数据可以拆为:【20,30】、【35,45】、【35】三个数据然后分别绘制。原创 2022-10-14 10:55:00 · 1241 阅读 · 5 评论 -
Android 使用 jacoco生成单元测试报告时报错: Unable to find a matching variant of project
在子library项目的gradle中加入coverageDebug 配置,放在buildTypes 下。找不到的project是我当前项目引用的一个library。平时编译正常,只有单元测试的时候报错。在使用 jacoco生成单元测试报告时,报错。原创 2022-09-14 18:52:01 · 691 阅读 · 0 评论 -
Android 横竖屏切换 fragment view显示刷新
通常做法是将数据暂存到viewmodel中,然后再重新加载一遍,获取暂存数据赋值。但是,由于我的fragment状态数据比较多,且实时变化,我这边不想重新加载,最后使用动态改变view位置的方法。(当然前提是横竖屏切换,位置改变的view数量没有很多)。如果横竖屏UE效果显示差别大的话,在横竖屏切换的时候,需要重新加载新xml文件。但是Fragment不能像Activity一样直接setContentView(),Fragment横竖屏切换的时候需要重新加载,生命周期走一遍才行。原创 2022-09-09 10:24:22 · 1535 阅读 · 0 评论 -
Android - System.currentTimeMillis()计算时间差出现负数(NITZ和NTP机制学习)
测试的设备的系统时间设置的是自动网络更新,设备会同步Internet时间服务器的时间,当同步新的时间比之前的时间小时,就导致了时间差出现负数。System.currentTimeMillis()获取的是当前系统时间,设置中自动同步网络时间开关也是默认开始的,上面的问题根本原因是自动更新时间后,更新后的时间小于之前的时间,于是看了下系统时间的更新机制,按照自己理解简单梳理了下流程,详细大家可以去看博客。NetworkTimeProtocol(网络时间协议),用来同步网络中各个计算机的时间的协议。......原创 2022-06-02 15:56:37 · 2189 阅读 · 0 评论 -
有commit-msg文件,依然报错Git missing Change-Id in commit message footer
问题:之前提交代码出现了:Git missing Change-Id in commit message footer,然后在其他项目了把hook文件夹拷贝到项目仓库.git下,提交一直正常,但是今天提交代码又爆出这个问题,查看commit-msg文件也有。解决方案关于该报错网上解决方案很多,大家可参考下面的文章,但是我又尝试了一遍也没解决我的问题。最后实在没招,又将该仓库重新clone下载了一遍,然后把commit-msg文件放到新项目仓库.git/hooks目录下,提交没问题。【Git】Git原创 2022-05-16 11:01:01 · 309 阅读 · 0 评论 -
Android - Activity隐士启动相关问题
一、需求开发过程中,经常有应用间界面跳转需求,这里建议使用隐士Activity跳转,因为显示跳转需提供类名,哪天别人维护的时候把名字改了,那就爽歪歪了,action常量一般不会动。二、跳转代码自己应用AndroidManifest.xml中注册启动action:com.jane.test.START<activity android:name=".MainActivity"> <intent-filter> <action androi原创 2022-04-24 11:46:56 · 1596 阅读 · 0 评论 -
AndroidTV - TextView相关问题
需求:有个文字显示,超出显示范围的跑马灯展示,且有个阴影展示。问题;这个功能比较寻常,但是TextView跑马灯效果是在有焦点的情况下才会跑,做的界面中有个recyclerview会一直占用焦点,需要重写TextView,一直在获取焦点状态。实现:1、xml代码: <com.example.MarqueeTextView android:layout_width="wrap_content" android:layout_height="wrap_cont原创 2021-12-24 17:16:35 · 301 阅读 · 0 评论 -
Android 子类父类对象相互转换
问题描述:开发的过程中有个场景,有个数据结构是上传数据时用到的UploadData,这个结构在其他模块也有用到,因此定义完后一般不会修改添加。但是我本地UI是用一个recyclerview来展示数据,需要在原有的数据结构上加两个状态信息,因此,本地新建了一个数据结构DisplayData继承了UploadData,在原基础上加上了两个状态位参数。但是每次数据下载和上传需要两个对象互相转换下。解决方法:使用了Gson下载的数据可以直接使用Gson转化为DisplayData类;数据上传的时候可以使原创 2022-03-11 22:24:22 · 3681 阅读 · 0 评论 -
Android DatePicker spinner 年、月、日数字格式设置
需求:使用DatePicker 做个时间选择器,但是日期小于10的时候,显示为01,02,03…,要求去掉前面的0;实现:下面实现了日期的格式设置,同理可以获取年、月的NumberPicker,然后设置format。private void setPickerStyle(DatePicker datePicker) { Resources mResources = mContext.getResources(); int id = mResources.getIdentif原创 2021-11-09 18:40:48 · 3085 阅读 · 0 评论 -
Android EditText 自动获得了焦点 但没有弹出输入法
问题:有个搜索界面Dialog,点进去有个EditText输入框。现在一拉界面,EditText就获取了焦点,但是输入法软键盘没有弹出来,这时手动点下EditTex才会弹出。解决办法:参考链接1中的代码,延迟弹出输入法。et_nicname.setFocusable(true);et_nicname.setFocusableInTouchMode(true);et_nicname.requestFocus();Timer timer = new Timer();timer.schedule(ne原创 2021-10-28 18:56:28 · 1971 阅读 · 0 评论 -
Android GradientDrawable 转 Bitmap
需求:最新开发,有几个渐变色的背景,因为图片比较大,为减小应用体积,用drawable资源文件来加载,然后代码转为Bitmap在设置背景。实现:private Bitmap getBitmapGradient(){ Drawable drawable = mContext.getResources().getDrawable(R.drawable.background_gradient); GradientDrawable gradientDrawable = (GradientDr原创 2021-10-21 10:35:07 · 2580 阅读 · 0 评论 -
Android 批量修改文件名称
需求:最近开发,图片资源是另一个公司同事给的,大约有180张图片,拿到资源后发现,图片名称有些问题:1)名称首字母大写,例如:Apple.png2)名称中有空格,例如:Green Leaf.png3)名称中有特殊符号,例如:Fresh’egg.png闲聊 是的,从这就能看出来,只要活干完了,人家就不管了,你用着顺不顺手那就是你的事了,反正图已经出给你了,如果你让他改,估计会晾你一两天,最终的结果可能还会有其他问题,并且会觉你这个人事很多。刚入职碰到这种人还挺无语的,现在已经没啥脾气了,因为,这种人原创 2021-09-23 19:03:03 · 1790 阅读 · 0 评论 -
Robolectric单元测试 - PowerMock导致的ClassCastException
Bug描述:单元测试的时候,多个类同时Mock了一个工具类,每个类单独测试的时候是好的,但是整个项目测试生成测试报告的时候,只有第一个测试通会通过,其他的就提示ClassCastException错误。仔细看报错会有这么一句:You might experience classloading issues, disabling the Objenesis cache might help (see MockitoConfiguration)"原因是这个类用了不同的类加载器加载,我个人理解是第一个测试类原创 2021-09-07 15:50:21 · 707 阅读 · 0 评论 -
Android DatePicker spinner 样式设置(分割线颜色、位置等)
最新开发使用了Android提供的日期选择控件DatePicker,因为只做一个滚轮的时间选择,所以mode设置为了spinner ,但是这个控件很多样式不能在xml中直接设置,为满足UE的要求,主要参考了文章:Android DatePicker,NumPicker解析(分割线颜色及调整大小)他文章中分割线的颜色是代码中设置的,我这边找了一个style中直接设置的方法,其他都是借鉴的他的文章,代码如下:1、在style中设置文字大小,颜色及分割线的颜色。<style name="Theme.原创 2021-08-27 15:58:57 · 2362 阅读 · 0 评论 -
Robolectric单元测试 - Android Could not determine artifacts for XXXX: Skipped due to earlier error
最近使用Robolectric单元测试的时候遇到如下问题:一直报资源类找不到,需要在app下的gradle中加入(代码手动打的,可能会有错误,见谅)testOptions{ unitTests{ includeAndroidResources = true }}加完上面代码之后出现了标题的错误,具体是androidx.test.monitor2…这个找不到,每次sync好久,然后报同样错误,参考了如下链接文章,但是对我帮助不大。请同事帮忙看下,比较了我们俩配置,发现Gradle版本引用原创 2021-08-26 16:06:55 · 991 阅读 · 0 评论 -
AndroidStudio中打包嵌套第三方aar的aar
之前写过一个如果打包嵌套第三方jar包的jar包,现在又搞了一把aar,齐活了。。。一、需求说明开发过程中需要将自己开发的项目Screen(包含资源文件)以aar的形式提供给同事,但是打包的时候会发现,Screen项目中依赖的Weather.aar中的代码并没有一块打包进来。。。解决这个问题,我使用的是fat-aar工具,参考博客图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar,博客很详细。主要步骤如下:1、Screen代码库app下的build.gradle中加原创 2021-06-03 18:46:41 · 2963 阅读 · 1 评论 -
RecyclerView 点击item后checkbox选中状态改变但onItemClick未回调
一、问题描述RV中的一个需求是点击多选删除按钮后,item右上角刷新显示checkbox按钮,然后点击选中后可进行删除。但是在自测代码的时候碰到一个问题,偶尔会出现点击item后checkbox已经选中了,但是onItemClick没有调用,导致选中的item不能被删除的问题。二、问题原因1、在实现的过程中只对viewHolder整体item设置了click监听,在监听到item被click后通过 setChecked()方法设置check状态。2、xml中没有把checkbox的clickabl原创 2020-08-13 22:54:17 · 774 阅读 · 0 评论 -
AndroidTV RecyclerView长按焦点乱跳或丢失问题-重写GridLayoutManager
一、问题背景之前TV端开发遇到的一个问题,RV显示的方式是GridLayoutManager,三列,方向是:VERTICAL,也就是三列显示,上下移动。但是在快速按下键的时候,焦点在最后一排后会跳到旁边的RV上,焦点自动跳走了。要求肯定是移动到最下方的时候,焦点就在最下边呆着,界面如下图:二、解决方案参考链接:http://blog.csdn.net/Zou_pl/article/details/77507376该文重写了LinearLayoutManager,于是仿照人家重写了GridLayou原创 2020-07-29 23:07:28 · 1339 阅读 · 0 评论 -
Android 判断输入的年月日是否合法-正则表达
判断输入的年月日是否合法的工具类如下,可直接复制粘贴使用:package com.company.utils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Va原创 2020-07-28 22:17:04 · 738 阅读 · 0 评论 -
Android 限制EditText输入工具类(只允许中英文和数字)
如下是代码中常用的EditText输入限制工具类,有需要的可直接拿去。package com.hisense.health.util;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.regex.PatternSyntaxException;public class TextInputUtil { public static boolean isValidString(Strin原创 2020-07-28 22:04:47 · 1745 阅读 · 0 评论 -
优化横向分页自定义LayoutManager-HorizontalPageLayoutManager
需求:要实现一个横向分页可滑动的显示效果,查了下网上的实现方式,发现一个效果一样的,参考连接如下:一行代码让RecyclerView分页滚动但是实现以后发现应用运行起来巨卡,参考了张旭童的文章(掌握自定义LayoutManager),发现这篇文中在onLayoutChildren中会遍历所有的子item并执行如下语句:View view = recycler.getViewForPosition(index);和同事一快优化时,同事说每次走这个都会走onCreateViewHolder,因此这个原创 2020-07-19 22:04:25 · 1333 阅读 · 5 评论 -
setSupportsChangeAnimations(false);不作用
之前在使用notifyItemRangeChanged刷新的时候,有动画回闪下,之前加上如下代码:((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);但是最近添加后没效果,后面改成如下可解决问题,前面是我的recyclerview:mRCView.setItemAnimator(null);...原创 2020-07-19 21:26:16 · 2152 阅读 · 0 评论 -
Android8 自定义广播接收不到的问题
1. 问题的前提:本人维护的一个应用是通过按键发送一个自定义广播,然后拉起服务。原来项目开发是在Android6,将该应用安装到Android7系统上面可正常使用,但是安装到Android8上面,死活收不到广播。通过百度参考了两篇文章(文章最后加备注),做了以下总结:2.原因:Android8在静态广播的使用上做了一些限制具体可查看:https://developer.android.goog原创 2018-01-07 22:06:16 · 22015 阅读 · 11 评论 -
Eclipse编译生成release版本apk
问题背景:今天突然收到邮件说集成到系统的apk是debug版本,没办法进行CTS,需要修改到release版本的apk。解决办法:一直以来并不知道编译生成的apk是区分debug和release版本,所以百了一下区别和生成的方法,百度知道的方法:点击Run->RunConfiguration->build Configuration。我并没有找到build Configuration,后来一位原创 2018-01-17 09:03:44 · 4344 阅读 · 1 评论 -
View事件分发
一、触摸事件的分发1.基本事件:分发事件:public boolean dispatchTouchEvent(MotionEvent event) 拦截事件:public boolean onInterceptTouchEvent(MotionEvent event) 处理事件:public boolean onTouchEvent(MotionEvent event)2.分发流程Activit原创 2018-04-07 17:23:21 · 176 阅读 · 0 评论 -
父类中this的含义
父类中this指代的是那个对象?最近打算把《第一行代码》这本书再看看,之前都是随用随学,有些东西并没有理解的很好。再看到第二章的时候,看到了如下代码:public class BaseActivity extends AppCompatActivity { private static final String TAG = "BaseActivity"; @Override...原创 2018-06-12 23:19:39 · 1916 阅读 · 1 评论 -
应用间非数据库数据共享ContentProvider&MatrixCursor
之前学习Android时,照着《第一行代码》的例子敲了一边,实际开发时,需求并不是提供数据库中的数据,而是应用中的一个list或者一个String类型状态信息,当时反而不知道该如何将这些信息包装到cursor中,后面学习了MatrixCursor,解决了当时的问题,现在编写了一个例子回顾一下:在《第一行代码》的第三章,有个关于水果的RecyclerView例子,在其基础上做点修改,之前例子显示...原创 2018-06-13 14:18:36 · 802 阅读 · 0 评论 -
使用Timer类schedule方法出现:java.lang.IllegalArgumentException:Illegal execution time
之前一个应用在新的机型上出现闪退的问题,还是必现,复现了下,看到log中出现java.lang.IllegalArgumentException:Illegal execution time的错误,锁定到代码中发现,错误出现在Timer的schedule方法中。代码如下,中间的处理省略了。出这个问题很奇怪,llegalArgumentException此异常表明向方法传递了一个不合法或不正确的...原创 2018-06-21 17:29:55 · 3686 阅读 · 0 评论 -
全屏Dialog间切换,出现闪屏
项目中有个交互是点击Activity中的一个按钮,弹出全屏Dialog1,再点击Dialog1上的按钮,弹出Dialog2,按返回键回到Dialog1。关系图如下: 由于项目中所有的Dialog都是全屏的,在两个Dialog相互切换的时候,总是觉得会闪屏,一直很纳闷是为什么,后来一个同事说你把动画去掉试试,才想起来写代码的时候Dialog拉起和退出的动画都没有设置过,为默认值。于是在st...原创 2018-06-22 16:50:34 · 9184 阅读 · 4 评论 -
AndroidTV应用整机编译出错
一、问题背景前段时间新维护个AS开发的Android应用,拿到代码后,编译、安装及使用都是正常,于是将修复完BUG的应用提交到整机代码中,但是整机编译时报错,显示为dex解析失败。咨询之前出现该问题的同事,他的解决方法是:将编译为debug版的应用改为release版。我这边尝试该方法后,发现没有用。由于之前维护该代码的同事提交到整机是正常的,因此把她给我的代码和现在我导入到AS的代码进行...原创 2018-12-01 13:54:06 · 357 阅读 · 0 评论 -
AndroidO:TargetSdk设置为26后出现error:SharedPreferences in credential encrypted storage are not available
java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked一、问题背景在一个AndroidO的平台上,将一个使用SharedPreference应用的TargetSdk设置为26后,如果在TV刚开...原创 2018-12-01 14:44:00 · 11386 阅读 · 1 评论