自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chivalrous

The more I practice, the luckier I get.

  • 博客(58)
  • 资源 (27)
  • 收藏
  • 关注

原创 安卓开发日志采集和分析面面谈

明确系统提供了哪些日志,cpu、meminfo、app、log等,我们怎么看日志,看日志的三步骤,怎么用工具提高分析日志的效率,bugreport和chkbugreport。

2024-05-27 11:22:02 960

原创 Android百问百答-《那些年被问过的Handler原理》

Android百问百答-《那些年被问过的Handler原理关于Handler,安卓面试最热门的知识点之一。本篇文章将围绕3点展开:可以提问哪些Questions?面试官会怎样follow up?以及怎样寻找答案。文章快速索引Android百问百答-《那些年被问过的Handler原理Handler常见提问Handler常见Follow UpHandler源码分析Handler#构造函数原理Handler#obtainMessage 原理Message源码分析Handler#post的原理Handle

2020-08-14 22:05:48 610 1

原创 android蓝牙通信常见问题总结

使用ble蓝牙连接方式,bluetoothGattCallback#onConnectionStateChange一直返回STATE_DISCONNECTED。此问题出现在传统蓝牙连接方式。

2024-10-25 14:09:32 1045

原创 javax.net.ssl.SSLHandshakeException: Chain validation failed

解决方法很简单,检查一下设备系统时间是否在证书有效期内,若没有就改到有效期即可(一般系统时间调整为跟网络一致)。缺点是信任任何网址,无论是否有证书或者在证书有效期内,可以按需修改为信任指定网址。解决方法二:跳过https验证机制。

2024-09-25 18:18:48 1111 1

转载 Broadcast Recevier漏洞详解

广播安全方面的bug

2024-06-20 17:11:00 200

原创 安卓ANR检测、分析、优化面面谈

一个引发讨论的楔子,以下三种现象有什么区别:Application Not Responding按键或触摸事件在特定时间内无响应(origin:5s)KEY_DISPATCHING_TIMEOUT = 8*1000Broadcast TimeoutBroadcastReceiver在特定时间内无法处理完成BROADCAST_FG_TIMEOUT: 10sBROADCAST_BG_TIMEOUT: 60s按键和广播事件时间内未响应,时间限定定义在ActivityManagerService.jav

2024-06-01 18:30:00 391

原创 内存泄漏面面谈

主要介绍了内存泄漏的关注点是对象,对内存问题进行了分类并且确定本文关注点是内存泄漏,15种内存泄漏判断方式,hprof文件的用法和分析过程,以及memory profiler工具一些基本概念,最后提到了如何触发内存泄漏问题

2024-05-28 18:15:00 2264

原创 Android ANR Trace日志阅读分析技巧

Trace日志是指ANR目录下的一份txt文件,Trace日志用于分析应用ANR无响应的问题,,Trace日志的三个关键组成Heap部分、垃圾回收器histograms部分、Thread部分。

2024-05-28 09:52:35 1331

原创 安卓六种页面加载优化方案对比总结

非业务执行顺序的,仅UI层面的优化,详情可以阅读笔者过去的文章Android与Web骨架屏详解。控制业务与UI的执行顺序、控制多业务之间的执行顺序。下面是这六种页面加载优化方案的对比。

2024-05-27 14:44:51 405

原创 安卓Bug总结

查看cpu和内存排序adb shell COLUMNS=512 top。查看内存排序 adb shell dumpsys meminfo。搜索NetworkOnMainThreadException。安卓十年开发遇到过得Bug做一个总结,大同小异,总结教训。在anrlog搜索total、memory--查看内存相关。或搜索 uncaughtException。搜索 UMCrashHandler、搜索ANR Warning。搜索 Exception。搜索AnrManager。这里存放BUG目录列表。

2024-05-27 09:54:22 904

原创 【安卓开发小经验】Android防抖动四种方案实践

这种方案简单的说,当一个动作连续触发,则只执行最后一次。查看代码,只有一个方法throttleFirstProcess方法会接收Runnnable对象作为value,以任务名作为key存储在一个ConcurrentHashMap里,每个Runnable的特点是将被延时1秒执行为了实现只执行最后一次的效果,我们主要利用了ConcurrentHashMap对象put方法的特性,

2024-05-27 09:42:29 2569 2

原创 【ANR问题小结】ANR小问题集合

广播超时、input event超时等问题、SP超时getString#apply#new超时、Input event dispatching timed out sending to\ANR Warning onLayout time too long问题分析及解决

2024-05-24 17:26:43 1379

原创 Gradle常见问题及总结

包括以下问题:gradle插件与gradle home版本关系错误、Gradle下载太慢、Executionfailed forJetifyTransform:xx.jar 、Failed to transform file ‘xxxxx.jar‘ to match attributes 、Module was compiled with an incompatible version of Kotlin.

2024-05-24 17:25:23 1581

原创 You must call removeView() on the child‘s parent first.异常分析及解决

view在上次已经是某个ParentView的child,然而现在又把它做为另外一个view的child,于是出现一个view有两个parent。个人理解是,因为F已经被添加到ViewGroup A中了,不能再被添加到ViewGroup B中,直白点就是,一女不能侍二夫。想要把F添加到ViewGroup B中,就要ViewGroup A先把F移除掉,再添加到B中去。对试图组件快速的左右滑动过程,发现某一张图片没加载出来,偶现crash。方案2:先移除,解绑与父view的关系,再重复添加。

2024-05-24 17:09:53 435

原创 $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams

View.getlayoutParams,返回的是父view的参数,父view 是什么,就得赋值给对应的父View.LayoutParams。动态添加子view的时候,报crash,提示。传递父view类型的LayoutParams。

2024-05-24 17:07:24 348

原创 ViewFlipper常见小问题

包括与click事件冲突、与Activity生命周期的关系

2024-05-24 16:56:08 214

原创 帧动画播放出现oom异常分析及解决

bitmap.recycle并不会立刻回收内存,内存还是会很紧张。源代码每一帧都创建一次bitmap,极度消耗内存。利用inbitmap,每一帧复用同一片内存区域。需要播放序列帧,帧数特别多的时候会oom。

2024-05-24 16:35:24 266

原创 【Glide】Glide/Picasso常遇到的小问题集合

包括了以下小问题You cannot start a load for a destroyed activity、图片加载异常class com.bumptech.glide.load.engine.GlideException: Failed to load resource、不支持http、保存的图片自动旋转90°、加载图片出现黑边

2024-05-24 15:51:06 835

原创 【okhttp】小问题记录合集

包括can’t create native thread、get不支持请求体、urlencode编码二次的问题The valid characters are defined in RFC 7230 and RFC 3986、 回调都在子线程、eader不支持中文、java.lang.IllegalArgumentException: Could not locate call adapter for io.reactivex.Observable、SocketTimeoutException或常分析及解决

2024-05-24 15:36:25 1143

原创 Android 链接4G热点网络第一次请求很慢ipv6地址链接异常分析及解决

网上查了查,答案都指向了DNS解析设置的问题,解析有两种 ipv4 ipv6 ,android默认不支持ipv6解析,之后问了下后台配置,说IOS 的 appstore 审核,必须需要ipv6的配置才能正常进行,所以服务端增加了 ipv6 支持,同时也支持ipv4,但是ipv6的入口再美国,那这样看来,猜测是否是android手机默认通过ipv6去连接后端服务器,绕了一大圈才返回结果?要知道,Android设备的规模已达几十亿,占据了智能手机市场的几乎八成,它不支持IPv6无疑是极大的桎梏。

2024-05-24 11:23:24 1653

原创 【相机开发问题总结】锁屏下相机资源释放问题

根据上面的文档,推测是锁屏下系统并没有改变surfaceview的可见性,于是我尝试在onPause和onResume时通过手动设置surfaceview的visibile属性,结果发现可以正常触发回调函数了。问题出现在跳转页面之前,可能触发了锁屏,会导致息屏,息屏呢,同时会释放相机资源,释放人脸识别sdk,以便于两瓶再次恢复页面的时候,重新申请相机资源,而此时会出现app crash。系统锁屏时间设置了15秒,有一个页面是人脸识别页面,会开启相机展示相机预览内容,并分析人脸结果,自动跳转到下一个页面。

2024-05-24 11:11:13 362

原创 【相机开发问题总结】后台恢复到前台预览界面卡住

surfaceView或TextureView通过new实例化,而不是在布局中定义。并且在onStart() 通过addview方式把view加到布局中,在onStop()时通过removeView()方式移除view。页面提供了相机预览功能,该页面有可能长时间活跃在前台,也有可能偶尔被语音或者其他操作顶到后台去。onStop()时,SurfaceView或TextureView没有销毁。所以重新打开摄像头时,view的生命周期不会重新执行,也就无法刷新。回到前台时,需要恢复相机资源和预览界面。

2024-05-24 10:48:46 420

原创 【相机开发问题总结】小问题集合

camera开发的小问题,小异常,小bug总结,如黑屏、多次初始化、捕获视频流等问题。

2024-05-24 10:41:20 631

原创 java.lang.UnsatisfiedLinkError: dlopen failed: “/lib/arm64/libGlobal.so“ 异常分析及解决

之前我就遇到过使用高德地图和二维码扫描Qrcode造成的冲突,Qrcode是一个module做为app工程的library,因为高德地图必须要在armeabi-v7a文件夹下放置so文件,而做为library的Qrcode则同样也需要armeabi-v7a不然编译报错,但恰巧Qrcode只有32位的,这样就尴尬了,后来查询了资料终于解决了这个问题,问题就来了,有些网上找的64位的不一定是三方官方提供的,那么就不能去使用和兼容。说到这,首先想到的办法就是从网上在下载个64位的so文件不就完了,

2024-05-24 10:21:14 635

原创 java.lang.IllegalArgumentException: PhoneWindow$DecorView not attached to window manager异常分析及解决

一个老项目,网络请求时会弹出loading,loading的技术实现是用Dialog实现的。频繁展示loading的时候,偶现。是:loading显示->网络请求->异步callback回调->loading隐藏。是在异步callback回调->loading隐藏的时候。隐藏dialog之前判断dialog是否处于显示状态。判断activity是否正常、页面是否销毁。当然以防万一,做好完整的判断更好一点。在异步回调里做UI操作之前。

2024-05-24 10:08:06 476

原创 Only the original thread that created a view hierarchy can touch its views异常分析及解决

开发一款视频通话App时候,有个需求是查询通话记录列表,查询通话记录,毫无疑问要做网络请求,在该请求的callback中同时做了view初始化操作,logcat提示。android不允许子线程操作UI。在主线程中操作UI,可以有以下做法。

2024-05-24 09:56:15 1571

原创 adb频繁重启问题分析及解决

6.修改db端口adb:windows修改adb自定义端口号,在计算机-属性-高级系统设置-环境变量-系统变量,新增ANDROID_ADB_SERVER_PORT,变量值即为端口号,自行定义。4.一般经常断是因为端口被占用,所以修改端口,有一段时间我把端口改成44444,好了一段时间,但是没过多久,又开始掉线。2.命令行 adb kill-server adb start-server adb devices。5.查看端口被占用情况(不会网搜),如果发现又一个程序占用了adb端口,直接将占用的程序卸载。

2024-05-23 18:47:01 1317

原创 application多进程初始化异常分析及解决

一般情况下,一个应用程序就一个进程,这个进程的名称就是应用程序包名。Android 的四大组件在 AndroidManifest 文件中注册的时候,有个属性是 android:process,这里可以指定组件的所处的进程。在 MaApplication 中直接对 PriorityLogicWrapper 进行操作,无需操作 BaseApplicationLogic 对象。安卓允许一个App声明多个进程,多个进程初始化时会创建多个Application,可能引发许多不可控问题。

2024-05-23 18:41:37 409

原创 【内存泄漏Bug】animation未释放

一个页面做了动画特效,这个页面有可能跳转到其他页面,并长时间不返回,该页面此时已经不活跃了,该页面的对象为无用对象,存在内存泄漏风险。在onPause、onResume做动画的停止、恢复处理,避免重复创建动画;页面不再处于前台的时候,未将动画暂停,释放动画资源。在onDestory做动画的销毁处理,避免无法gc。3. 点击back按钮,并不会杀死当前页面。2. 有可能从其他页面跳转回来。这个activity的特性是。1. 有可能跳转到其他页面。

2024-05-23 18:10:08 483

原创 【内存泄漏Bug】registerReceiver Are you missing a call to unregisterReceiver()异常分析及解决

开发一款WIFI管理APP,再wifi列表页面注册了广播监听,监听网络变化,页面是常驻内存的,跳转到其他app或者其他页面的时候,此页面存在被系统销毁的可能。页面回退之后,广播忘记反注册。页面销毁调用反注册广播。

2024-05-23 18:00:17 551

原创 【相机开发问题总结】曝光补偿ExposureCompensation未生效异常分析及解决

做一款相机应用时,用户反馈相机预览界面太暗了,由于我们是嵌入式设备,没有手机那么高大上得闪光灯补光,因此只能考虑从软件层面提高界面亮度,还好找到了曝光补偿,但是开发过程中发现曝光补偿未生效,界面依然很黑。android camera可以通过以下五个API,分别获取step,最大曝光补偿级数,最小曝光补偿级数,当前曝光补偿级数,设置曝光补偿级数。曝光补偿值=step * 曝光补偿级数。曝光补偿存在一定范围,比如-2至2,或者-3至3,单位为EV,可以理解为exposure value。根据上述概念,我发现。

2024-05-23 17:56:24 795

原创 【相机开发问题总结】java.lang.RuntimeException: setParameters failed异常分析及解决

我们能够得到什么信息呢,setParameters方法是调用jni方法native_setParameters的方法,事实上看到这里就差并不多了,由于再去查看jni方法是非常麻烦的。我们能够发现传输进来的是Parameters參数,调用了Parameters的flatten方法。非常多人不知所以然就上网開始找,找不到就開始各种推測,一个个參数设置过去,事实上最有效的方式是究竟层找原因。经过与ROM开发同事沟通,是由于android的setParameters参数传递错误,该参数不被底层支持。

2024-05-23 17:50:50 555

原创 【相机开发问题总结】Caused by: java.lang.RuntimeException: Fail to connect to camera service异常分析及解决

开发一款嵌入式设备,有多个相机,以usb形式和串口形式连接,调用open方法得时候,crash闪退。先获取安卓可识别得camerid,再传递给open函数。camer.open 时,传错了camer id。

2024-05-23 17:44:04 653

原创 java.lang.IllegalStateException: closed 异常分析及解决

response.body().string()只能请求一次,请求过后,就会关闭,再次调用response.body().string()就会报close异常,使用变量接收数据,后续使用变量data 就可以解决这个问题。使用okhttp请求数据,进行解析,遇到。

2024-05-23 17:35:34 1325

原创 SUPPLICANT_ERROR——Android Wifi列表频繁刷新异常

总的来说: 此现象在发生在scan和user connect刚好一前一后发生,并且scan未处理完user就trigger connect.,要求时间刚刚好打到。开发一款WIFI管理应用,基础功能有WIFI列表查询功能,在之前有链接过WIFI得清空下,频繁点击WIF列表查询功能会收到SUPPLICANT_ERROR广播。所以应用层的解决方法是:1.避免在调用scanWifi()的短期内调用connect,就是避免在扫描期间调用connect。自动链接WIFI得时候,要判断是否处于WIFI扫描期间;

2024-05-23 17:32:50 280

原创 ANR Warning onLayout time too long问题分析及解决

频繁点击、频繁请求或其他快速频繁操作触发了onLayout ,同时onLayout 中做了耗时操作,导致anr。一个ViewPager中频繁刷新,偶发。

2024-05-23 17:27:03 542

原创 Android android.os.DeadObjectException aidl通信异常分析及解决

针对应用开发,可以在服务端进程启动的时候发个消息给客户端,客户端收到消息的时候重新进行绑定操作,目的是为了同步客户端和服务端的连接,客户端进程启动的时候也要绑定一次(注:在已经连接的情况下,服务端由于某种原因进程重启了,如果客户端没有收到回调,客户端保存的连接不为空,这时调用服务端接口就会抛出DeadObjectException异常)3)在service绑定成功后,调用linkToDeath()注册进service,当service发生异常断开连接后会自动调用binderDied()

2024-05-23 17:12:55 1417

原创 java.io.IOException: setDataSource failed.: status=0x80000000异常分析及解决

做一款新得音乐播放器,播放音乐闪退Crash,看到最后报告的异常是IO异常:`java.io.IOException: setDataSource failed.: status=0x80000000`

2024-05-23 17:08:56 897

原创 Rom应用开发遇到得一些小bug

设备拔电重启,ROM时间为默认时间如1970年1月1日,与某些业务场景互斥。记录一些细碎得bug。

2024-05-23 17:00:06 484

原创 java.util.ConcurrentModificationException异常分析及解决

有一个RecycleView视图组件,数据变更得时候进行了增加和删除操作,频繁触发 增加、删除数据得操作,低概率出现此问题,代码片段无法展示,可以语言描述一下代码片段。

2024-05-23 16:56:51 527

Android SSL证书验证原理

Android SSL验证原理

2016-08-25

低版本adb;21版本adb-adbplatform-tools-r21-windows

低版本adb;21版本adb;platform-tools_r21-windows;用于测试问题;;

2024-05-27

StarUML3.2.2最新免费版

1.安装StarUML_Setup_3.2.2.exe 2.将crack\app.asar文件复制到安装目录 StarUML\resources\目录下 注:所有文件来源于网络,仅供大家学习研究,试用过后请购买正版使用。

2022-03-31

JMS实时消息通讯源码-ActiveMQ Java服务端和Android客户端源码

1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、测试发送消息,打开本地服务器地址http://localhost:8161,登录服务器,默认用户名密码:admin,admin。登录以后就可以发送测试消息了,Android端可以接收。