- 博客(62)
- 资源 (27)
- 收藏
- 关注
原创 安卓开发日志采集和分析面面谈
明确系统提供了哪些日志,cpu、meminfo、app、log等,我们怎么看日志,看日志的三步骤,怎么用工具提高分析日志的效率,bugreport和chkbugreport。
2024-05-27 11:22:02 888
原创 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 563 1
原创 android蓝牙通信常见问题总结
使用ble蓝牙连接方式,bluetoothGattCallback#onConnectionStateChange一直返回STATE_DISCONNECTED。此问题出现在传统蓝牙连接方式。
2024-10-25 14:09:32 381
原创 javax.net.ssl.SSLHandshakeException: Chain validation failed
解决方法很简单,检查一下设备系统时间是否在证书有效期内,若没有就改到有效期即可(一般系统时间调整为跟网络一致)。缺点是信任任何网址,无论是否有证书或者在证书有效期内,可以按需修改为信任指定网址。解决方法二:跳过https验证机制。
2024-09-25 18:18:48 453
原创 安卓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 356
原创 内存泄漏面面谈
主要介绍了内存泄漏的关注点是对象,对内存问题进行了分类并且确定本文关注点是内存泄漏,15种内存泄漏判断方式,hprof文件的用法和分析过程,以及memory profiler工具一些基本概念,最后提到了如何触发内存泄漏问题
2024-05-28 18:15:00 2191
原创 Android ANR Trace日志阅读分析技巧
Trace日志是指ANR目录下的一份txt文件,Trace日志用于分析应用ANR无响应的问题,,Trace日志的三个关键组成Heap部分、垃圾回收器histograms部分、Thread部分。
2024-05-28 09:52:35 1175
原创 内存泄漏案例分享3-view的内存泄漏
案例3——view内存泄漏前文提到,profile#Leaks视图无法展示非Activity、非Fragment的内存泄漏,换言之,除了Activity、Fragment的内存泄漏外,其他类的内存问题我们只能自己检索hprof文件查询了。下面有一个极佳的view内存泄漏例子,它的操作步骤为:我们重复三次之后,得到一份hprof文件,下面我们来分析一下内存泄漏问题①输入view的名称②选择view③可以看到分配了3个实例对象④Instance List视图显示,view有3个实例对象及其引用我们
2024-05-27 22:15:00 1752
原创 内存泄漏案例分享2-Fragment的内存泄漏
可以看到Fragment内存泄漏的第一个原因,内部类runnable持有了view的实例,每个Runnbale会发送一个延时5秒的消息,消息发送期间,有可能view、fragment已经结束了生命周期,此时产生了内存泄漏。接下来我们来看fragment内存泄漏,老规矩查看fields和references,确保它符合内存泄漏的情形;解决办法也很简单,view离开窗口的时候,释放Handler中消息,释放Runnbale对view 的引用。Fragment#MZBannerView#内部类Runnbale。
2024-05-27 21:45:00 412
原创 内存泄漏案例分享1—Activity或Fragment的内存泄漏
总结上述3个内存泄漏点PlayUtil构造函数持有Activity未释放LoadProgress成员变量HashMap持有Activity未释放AIDL远程服务端持有Listener,Listener持有Activity未释放优化效果优化前,多次进入该页面,点击播放按钮,产生4个实例,有3个实例无法被垃圾回收,出现了内存泄漏的情况优化后,多次进入该页面,点击播放按钮,只产生一个实例根据Retained Szie来看,优化前后节省内存,效果达到了 49937/332 = 150 倍。
2024-05-27 19:30:00 1317
原创 内存泄漏案例分享4-异步任务流内存泄漏
优化后的效果:优化后可看到Depth为空,GC root 为空,表明没有其他实例引用Activity了,当垃圾回收器扫描到此实例,该实例内存会被回收。还记得开头的问题吗?rxjava就会存在内存泄漏吗?答:会存在,consumer作为Activity的内部类,持有当前Activity的引用,任务未结束,Activity已销毁就会出现内存泄漏subscribe传入的匿名内部类Consumer实例不会造成内存泄漏吗?答:只要是匿名内部类,就很有可能内存泄漏,上例子已经证明会产生内存问题。
2024-05-27 17:50:35 703
原创 安卓六种页面加载优化方案对比总结
非业务执行顺序的,仅UI层面的优化,详情可以阅读笔者过去的文章Android与Web骨架屏详解。控制业务与UI的执行顺序、控制多业务之间的执行顺序。下面是这六种页面加载优化方案的对比。
2024-05-27 14:44:51 292
原创 安卓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 873
原创 【安卓开发小经验】Android防抖动四种方案实践
这种方案简单的说,当一个动作连续触发,则只执行最后一次。查看代码,只有一个方法throttleFirstProcess方法会接收Runnnable对象作为value,以任务名作为key存储在一个ConcurrentHashMap里,每个Runnable的特点是将被延时1秒执行为了实现只执行最后一次的效果,我们主要利用了ConcurrentHashMap对象put方法的特性,
2024-05-27 09:42:29 1645 1
原创 【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 1150
原创 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 1196
原创 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 349
原创 $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 276
原创 帧动画播放出现oom异常分析及解决
bitmap.recycle并不会立刻回收内存,内存还是会很紧张。源代码每一帧都创建一次bitmap,极度消耗内存。利用inbitmap,每一帧复用同一片内存区域。需要播放序列帧,帧数特别多的时候会oom。
2024-05-24 16:35:24 214
原创 【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 420
原创 【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 1047
原创 Android 链接4G热点网络第一次请求很慢ipv6地址链接异常分析及解决
网上查了查,答案都指向了DNS解析设置的问题,解析有两种 ipv4 ipv6 ,android默认不支持ipv6解析,之后问了下后台配置,说IOS 的 appstore 审核,必须需要ipv6的配置才能正常进行,所以服务端增加了 ipv6 支持,同时也支持ipv4,但是ipv6的入口再美国,那这样看来,猜测是否是android手机默认通过ipv6去连接后端服务器,绕了一大圈才返回结果?要知道,Android设备的规模已达几十亿,占据了智能手机市场的几乎八成,它不支持IPv6无疑是极大的桎梏。
2024-05-24 11:23:24 1266
原创 【相机开发问题总结】锁屏下相机资源释放问题
根据上面的文档,推测是锁屏下系统并没有改变surfaceview的可见性,于是我尝试在onPause和onResume时通过手动设置surfaceview的visibile属性,结果发现可以正常触发回调函数了。问题出现在跳转页面之前,可能触发了锁屏,会导致息屏,息屏呢,同时会释放相机资源,释放人脸识别sdk,以便于两瓶再次恢复页面的时候,重新申请相机资源,而此时会出现app crash。系统锁屏时间设置了15秒,有一个页面是人脸识别页面,会开启相机展示相机预览内容,并分析人脸结果,自动跳转到下一个页面。
2024-05-24 11:11:13 295
原创 【相机开发问题总结】后台恢复到前台预览界面卡住
surfaceView或TextureView通过new实例化,而不是在布局中定义。并且在onStart() 通过addview方式把view加到布局中,在onStop()时通过removeView()方式移除view。页面提供了相机预览功能,该页面有可能长时间活跃在前台,也有可能偶尔被语音或者其他操作顶到后台去。onStop()时,SurfaceView或TextureView没有销毁。所以重新打开摄像头时,view的生命周期不会重新执行,也就无法刷新。回到前台时,需要恢复相机资源和预览界面。
2024-05-24 10:48:46 298
原创 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 459
原创 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 341
原创 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 1223
原创 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 725
原创 application多进程初始化异常分析及解决
一般情况下,一个应用程序就一个进程,这个进程的名称就是应用程序包名。Android 的四大组件在 AndroidManifest 文件中注册的时候,有个属性是 android:process,这里可以指定组件的所处的进程。在 MaApplication 中直接对 PriorityLogicWrapper 进行操作,无需操作 BaseApplicationLogic 对象。安卓允许一个App声明多个进程,多个进程初始化时会创建多个Application,可能引发许多不可控问题。
2024-05-23 18:41:37 321
原创 【内存泄漏Bug】animation未释放
一个页面做了动画特效,这个页面有可能跳转到其他页面,并长时间不返回,该页面此时已经不活跃了,该页面的对象为无用对象,存在内存泄漏风险。在onPause、onResume做动画的停止、恢复处理,避免重复创建动画;页面不再处于前台的时候,未将动画暂停,释放动画资源。在onDestory做动画的销毁处理,避免无法gc。3. 点击back按钮,并不会杀死当前页面。2. 有可能从其他页面跳转回来。这个activity的特性是。1. 有可能跳转到其他页面。
2024-05-23 18:10:08 414
原创 【内存泄漏Bug】registerReceiver Are you missing a call to unregisterReceiver()异常分析及解决
开发一款WIFI管理APP,再wifi列表页面注册了广播监听,监听网络变化,页面是常驻内存的,跳转到其他app或者其他页面的时候,此页面存在被系统销毁的可能。页面回退之后,广播忘记反注册。页面销毁调用反注册广播。
2024-05-23 18:00:17 487
原创 【相机开发问题总结】曝光补偿ExposureCompensation未生效异常分析及解决
做一款相机应用时,用户反馈相机预览界面太暗了,由于我们是嵌入式设备,没有手机那么高大上得闪光灯补光,因此只能考虑从软件层面提高界面亮度,还好找到了曝光补偿,但是开发过程中发现曝光补偿未生效,界面依然很黑。android camera可以通过以下五个API,分别获取step,最大曝光补偿级数,最小曝光补偿级数,当前曝光补偿级数,设置曝光补偿级数。曝光补偿值=step * 曝光补偿级数。曝光补偿存在一定范围,比如-2至2,或者-3至3,单位为EV,可以理解为exposure value。根据上述概念,我发现。
2024-05-23 17:56:24 590
原创 【相机开发问题总结】java.lang.RuntimeException: setParameters failed异常分析及解决
我们能够得到什么信息呢,setParameters方法是调用jni方法native_setParameters的方法,事实上看到这里就差并不多了,由于再去查看jni方法是非常麻烦的。我们能够发现传输进来的是Parameters參数,调用了Parameters的flatten方法。非常多人不知所以然就上网開始找,找不到就開始各种推測,一个个參数设置过去,事实上最有效的方式是究竟层找原因。经过与ROM开发同事沟通,是由于android的setParameters参数传递错误,该参数不被底层支持。
2024-05-23 17:50:50 422
原创 【相机开发问题总结】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 452
原创 java.lang.IllegalStateException: closed 异常分析及解决
response.body().string()只能请求一次,请求过后,就会关闭,再次调用response.body().string()就会报close异常,使用变量接收数据,后续使用变量data 就可以解决这个问题。使用okhttp请求数据,进行解析,遇到。
2024-05-23 17:35:34 721
原创 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 236
原创 ANR Warning onLayout time too long问题分析及解决
频繁点击、频繁请求或其他快速频繁操作触发了onLayout ,同时onLayout 中做了耗时操作,导致anr。一个ViewPager中频繁刷新,偶发。
2024-05-23 17:27:03 357
低版本adb;21版本adb-adbplatform-tools-r21-windows
2024-05-27
StarUML3.2.2最新免费版
2022-03-31
JMS实时消息通讯源码-ActiveMQ Java服务端和Android客户端源码
2018-05-23
sun.misc.BASE64Decoder.jar 适合Android和Java数据互通加密解密
2017-10-13
androidWebApp
2016-08-05
google fragment示例
2016-06-24
Google 官方 Android DisplayBimaps的优化事例
2016-06-02
获取脸书的哈西值
2015-11-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人