
Android
文章平均质量分 58
天宇365
沉淀~
展开
-
一次SocketException:Connection reset 异常排查
本次需求,并没有修改逻辑,为什么会出现这种情况呢?只是网络关系,还是跟代码有关呢。我有几个疑问:什么情况下会产生Connection reset? 长连接中,向server发请求,是先发送数据的,如果连接断开,应该是写数据异常,为什么是读数据异常呢?请求是否发送成功?发送之前有校验连接是否可用吗? http连接池defaultMaxPerRoute什么意思?每个并发都建立一个长连接吗? Connection reset之后,如何重新建立连接,继而继续进行业务交互? RestTemplate中配置转载 2021-09-28 18:46:04 · 2457 阅读 · 0 评论 -
so库保留哪些目录更合适?
原创 2021-09-08 10:36:02 · 188 阅读 · 0 评论 -
【记录】Android WebSocket实现即时通讯功能
转载自:https://www.cnblogs.com/xch-yang/p/11726497.html最近做这个功能,分享一下。即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易实现。但是如果项目有特殊要求(如不能使用外网),那就得自己做了,所以我们需要使用WebSocket。WebSocketWebSocket协议就不细讲了,感兴趣的可以具体查阅资料,简而言之,转载 2021-08-06 17:05:43 · 416 阅读 · 0 评论 -
小记一次线上OutOfMemoryError导致crash事故排查(一)
前几天,客户反馈应用有自动退出的现象。确认清楚后,是crash闪退,顿时有点慌啊。因为终端是内网环境,于是联系客户把终端的日志用U盘拷贝出来,发给我。通过日志排查,发现是OOM导致的crash,应用消耗了512M的内存,我去,怎么这么高。这时感觉有2个问题(优先级排序):1、可能是出现内存泄露的问题。2、检查应用为什么占用这么高内存。首先要查泄露问题,想到了工具Profiler和LeakCanary。先打开Profiler,点击MEMORY->然后点击,然后回出原创 2021-06-23 17:52:52 · 720 阅读 · 1 评论 -
ExoPlayer在开启循环播放时 统计播放次数和索引
1. 应用场景视频播放要循环播放,另外要在视频第一遍播放结束时出现某种提示。循环播放:我们可以通过设置setRepeatMode() 进行设置。另外在Player.EventListener的onPlaybackStateChanged(int state) 对播放过程进行监听。具体过程如下: public void onPlaybackStateChanged(int state) { Log.d(TAG, "onPlaybackStateChanged 播放转载 2021-05-06 14:31:21 · 1725 阅读 · 0 评论 -
android shape实现阴影或模糊边效果
android实现阴影的方式有很多,1. Android 在 API21(5.0)添加了 elevation,可以很方便的在 View 上实现阴影。但是这个只在 >= API21 的手机上可以看到阴影效果,低于这个版本的就没有阴影效果。2.CardView 也可以实现阴影效果,项目中一般都是使用这种方式实现卡片式的效果并带有阴影。使用 CardView 确实很不错,但是它在使用的时候也是需要有注意的地方: (1) CardView 实现阴影效果的布局,在 >= API 21 ...转载 2021-04-12 16:59:07 · 845 阅读 · 0 评论 -
Gradle productFlavors功能初体验
最近项目有个需求,项目分2个端,一个医生端,一个病人端,功能大概是医生端基本能覆盖病人端的功能,病人端会包含部分功能。需满足能同时安装、且医生端横屏、病人端竖屏。前一段时间复习了一下Gradle,所以想了下,Gradle可以轻松实现该需求。最初想到的是buildTypes,实际也可以实现,但后面看到 productFlavors更合适。于是加了两个flavorsproductFlavors{ doctor{ applicationId "com.lerou.原创 2021-03-17 12:12:36 · 195 阅读 · 0 评论 -
Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
https://blog.youkuaiyun.com/tu_bingbing/article/details/24143249转载 2021-03-10 14:07:00 · 143 阅读 · 0 评论 -
Android 资源命名规范整理
本文转载自:https://www.jianshu.com/p/868434805038参考结合官方、各厂、各博客标准命名规范,整理出的符合 Android 风格的资源命名规则。布局文件(Layout)命名<类型>_<位置>eg1.activity_homeeg2.item_countrylisteg3.layout_actionbar_backbutton类型选择activity | fragment | view | item | layout转载 2021-03-05 10:23:12 · 266 阅读 · 1 评论 -
合并多个清单文件(AndroidManifest.xml)
合并多个清单文件APK 文件只能包含一个AndroidManifest.xml文件,但 Android Studio 项目可以包含多个清单文件,这些清单文件由主源代码集、构建变体和导入的库提供。因此,在构建应用时,Gradle 构建系统会将所有清单文件合并到一个打包在 APK 中的清单文件中。清单合并工具通过遵循某些合并启发式算法,并遵守您使用特殊 XML 属性定义的合并偏好设置,将各个文件中的所有 XML 元素组合在一起。本页介绍清单合并的运作方式以及如何应用合并偏好设置解决合并冲突。提示..转载 2021-03-01 11:15:06 · 1805 阅读 · 0 评论 -
秒开率达90%:腾讯看点客户端 GIF 转视频优化方案
导语 |众所周知,在动图场景中, GIF 一直是应用得最广泛的技术,然而 GIF 文件体积太大的劣势,导致了一些诸如客户端 GIF 加载慢、服务器占用带宽大等问题。那么,在 GIF 占比如此高的今天,有没有一些更合适的动图格式,既能减小文件体积和服务器带宽,又能在客户端有不俗的性能表现?本文将介绍信息流场景下一套 GIF 体验提升的通用解决方案,该方案已经在腾讯看点内短内容场景中落地。问题背景看点短内容是看点信息流的重要内容,短内容有些类似微博段子,内容大多以娱乐、搞笑为主,因此有大量的 GIF 动转载 2021-02-26 17:10:00 · 699 阅读 · 0 评论 -
安装包瘦身-将资源图片转为WebP图片
WebP是 Google 的一种可以同时提供有损压缩(像 JPEG 一样)和透明度(像 PNG 一样)的图片文件格式,不过与 JPEG 或 PNG 相比,这种格式可以提供更好的压缩。Android 4.0(API 级别 14)及更高版本支持有损 WebP 图片,Android 4.3(API 级别 18)及更高版本支持无损且透明的 WebP 图片。此页面介绍了如何将图片转换为 WebP 格式,以及如何将 WebP 图片转换为 PNG 格式。注意:由于只有 Android 4.3 及更高版本支持无损和透.转载 2021-02-26 15:28:09 · 505 阅读 · 0 评论 -
Android Studio ‘Run‘ 按钮后面的秘密(Grade学习【一】)
‘Run’ 按钮,一点下,Android Studio 就会开动,代码奇迹般地变成 APK,被安装到手机上,显示 APP 的界面。背后发生了什么?点击 Run 按钮依次执行了 3 部分内容检查项目和读取基本配置 Gradle Build APK Install & Launch Activity让我们继续,看看这个结论是怎么来的,以及一路上还发现了什么。Android Studio 留下的面包屑Android Studio 给我们留下了什么——日志 点击An...转载 2021-02-23 15:46:25 · 1884 阅读 · 0 评论 -
Android各种圆角的实现
1、普通的控件使用sharp corners,设置背景实现圆角<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:width="1dp" android:color="#F6F7FC".原创 2021-01-21 14:14:41 · 778 阅读 · 3 评论 -
提交file文件时 no multipart boundary param in Content-Type
上传图片时报错400.no multipart boundary param in Content-Type解决方法:把 headers 里的 content-type 清空Retrofit的注解也去掉。 @Headers("Content-Type: application/json")原创 2021-01-14 12:09:30 · 6826 阅读 · 0 评论 -
兼容Android 11 存储权限适配框架
集成步骤dependencies { // 权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.hjq:xxpermissions:9.6'}一句代码搞定权限请求,从未如此简单XXPermissions.with(this) // 申请安装包权限 //.permission(Permission.REQUEST_INSTALL_PACKAGES)原创 2020-12-11 17:03:13 · 4183 阅读 · 0 评论 -
石家庄出差-软硬件调试小记
背景公司项目实施,涉及到软硬件调试,需要到现场安装以及测试,软件实际已经开发和测试完成,只是产品负责人担心新的硬件会有兼容问题,于是拉上我一起去现场。过程第一天飞机直达目的地,刚下飞机,就看到对接的技术发来测试结果:硬件A安装软件顺利,只是语音识别不能工作。于是下飞机到现场的路上已经在思考可能是讯飞的唤醒和阿里识别冲突了。于是到现场立马开好电脑,准备切换到百度的唤醒和识别服务,这块之前代码都有的,只是没有给项目配置。寻找账号赶紧弄好配置,然后测试一下,可以唤醒和识别。只是唤醒词是老.原创 2020-11-02 17:30:58 · 227 阅读 · 0 评论 -
Android5.1.1系统打开包含WebView的界面崩溃闪退问题
开发集成了androidx,在Android10真机安装调试未发现任何问题,开发完成后在vivo云测平台上传apk测试后发现在x7 Android5.1.1系统的真机上有闪退问题,看日志发现是webView问题,部分日志如下:android.view.InflateException: Binary XML file line #338: Error inflating class android.webkit.WebView at android.view.LayoutInflater.转载 2020-11-02 17:16:24 · 1032 阅读 · 0 评论 -
android 日志打印内容完全相同,Log的chatty机制,identical 391 lines
如下图代码输出现象:中间相同的日志,折叠了,只打印首尾2个。分析如下:打印日志时出现下面的日志信息:Thread-5 identical 9lines中文的大概意思时,有9行完全一样为什么会出现这样的问题呢是因为相邻的几行打印内容完全相同,从Android O开始Log的chatty机制,会把中间的重复内容不再打印。而是打印类似如上的 ”identical 391 lines“ ,告知有多少行的日志是一样的,这不是错误,只是减少了重复打印的次数。这个操作是在.原创 2020-10-30 14:05:51 · 8519 阅读 · 0 评论 -
2个SurfaceView重叠(一个webrtc的SurfaceViewRenderer, 一个ExoPlayer的SurfaceView),上面的SurfaceView透明不显示问题
发生问题前下面的SurfaceView已经设置如下 remoteSurfaceView.setZOrderOnTop(false) remoteSurfaceView.setZOrderMediaOverlay(false)然后手机和平板上显示都正常,但是运行在大的平板,android7.1.1系统上时,出现上层的SurfaceView出现透明不显示视频内容问题,有声音,然后透明显示出下面那个surfaceview的视频内容,找到上层设置ZorderOnTop,并设置,运行在不同原创 2020-09-25 17:06:31 · 1559 阅读 · 1 评论 -
Android Seekbar进度条末端显示不全的解决方法
调试环境基于Android 6.0。在调整我们的应用UI时,如果使用到了seekbar,那可能会出现下面这各情况,进度条末端的切图形状没有显示出来,比如我的切图末端 是圆弧形,显示的却是直角形。这种情况下可以用如下的方式解决:<SeekBar android:="@+id/seek" android:layout_width="@dimen/seekbar_width" android:layout_height="wrap_content" android:layout_gra转载 2020-09-24 16:53:19 · 1266 阅读 · 0 评论 -
Android分辨率适配layout布局的问题,多个layout文件夹
背景:应用需要在两种不同的分辨率-硬件设备上运行,然后界面上有细微的差别。新建分支是不太合适的做法,后期代码维护极不方便。于是有2种方案:1、针对某个分辨率,新建一个layout文件夹,名称为:layout-1024x640,让系统匹配布局文件,然后程序内做判空处理,兼容不同设备。2、程序中获取设备分辨率,然后根据不同分辨率,判断隐藏某些功能和UI。后面采用的第一种办法。注意:横屏版本的话,中间加上land,1024x640是dp,不是px。...原创 2020-09-18 14:14:43 · 2174 阅读 · 0 评论 -
Android AudioRecord每帧200ms数据量持续采集
背景这两天在对接某公司的asr(自动语音识别),但是他们没有提供android sdk,只提供了功能API。其中关键的一个步骤就是开始识别后,持续发送音频数据流,每200ms为单位的发送一次音频数据。很显然需要用到AudioRecord,可以输出未处理的裸PCM数据.PCM:PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。基础知识准备音频开发经...原创 2020-09-15 18:08:07 · 1931 阅读 · 0 评论 -
Gradle 下载依赖失败解决方法
修改单独项目在项目的build.gradle文件中,修改repositories配置由:repositories { mavenCentral() maven { url 'https://repo.spring.io/snapshot' } maven { url 'https://repo.spring.io/milestone' }}改为:repositories { maven{ url 'http://maven.aliyun.com/nexus/c...转载 2020-08-29 18:09:53 · 853 阅读 · 0 评论 -
adb wifi调试问题:由于目标计算机积极拒绝,无法连接
1. 初始化无线调试功能:初次启用adb无线wifi调试功能,需要先在手机开发者模式中打开“USB调试”功能,然后用USB连接手机到电脑进行配置,并连接手机和电脑到同一局域网中;2. 命令:# #号后的内容为注释。adb devices#查看当前电脑连接的Android调试设备.adb tcpip 5555 #启动手机的无线调试功能,调试端口设置为5555。#接下来,手动在手机上查看手机在局域网中的IP地址,查看IP地址的方法在此不赘述。adb connect 1...原创 2020-08-29 17:37:09 · 20524 阅读 · 2 评论 -
RecyclerView notifyDataSetChanged()刷新数据时图片闪烁
notifyDataSetChanged时导致图片闪烁这个问题比较好解决,一句代码,mRecyclerViewAdapter.setHasStableIds(true); 要注意,使用上述代码的话,Adapter中的getItemId要重写成如下,如果仍用super.getItemId(position),数据刷新会出错。 @Override public long getItemId(int position) { return position; }转载 2020-08-29 12:06:20 · 996 阅读 · 0 评论 -
关于图片的Base64编码
什么是Base64编码Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性。base64编码就是长得像下面这样子的代码:thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==上面代码大家都熟悉吧,迅雷下载链接哦,就是base64编码后的地址,所以以后看到这种:一堆连续字母,最后有1~2个"="的代码就是base64。Base64转载 2020-08-11 17:50:59 · 1907 阅读 · 0 评论 -
android webview动态添加样式,部分华为手机和平板异常--不支持16进制颜色值
webView.loadData(content, "text/html; charset=UTF-8", null)android webview使用loadData加载webview内容,content如下<body><div id='box' style='color:#ffffff;padding:12px;word-break:break-all;box-sizing:border-box;font-size:15px;'>测试webview文本</div.原创 2020-08-05 18:08:50 · 774 阅读 · 0 评论 -
RecycleView4种定位滚动方式演示
相信大家在项目中使用RecyclerView时,经常会遇到这样的需求:将RecyclerView滑动到指定位置,或者检索RecyclerView的某一项(各个项的高度不确定),然后定位滚动这到一项,将它显示。下面就讲解4种RecyclerView定位滚动的方式及具体效果演示。scrollByrecyclerView.scrollBy(x, y)使用:recyclerView.scrollBy(x, y)scrollBy(x, y)这个方法是自己去控制移动的距离,单位是像素,所以在使转载 2020-07-16 15:06:43 · 266 阅读 · 0 评论 -
【笔记】AndroidX RecyclerView添加滚动条
添加以下代码即可android:scrollbars="vertical"其他办法无效.原创 2020-06-20 18:06:06 · 738 阅读 · 0 评论 -
RecyclerView 复用item错误positon错乱的解决方法【完美解决】
@Override public int getItemViewType(int position) { return position; }把 return super.getItemViewType(position);改为 return position;其实这个返回的算是一个标识,这个标识我们来定义了,而不是用它们生成的方式。...转载 2020-06-12 19:29:53 · 536 阅读 · 0 评论 -
px,dp,dip,dpi,density,以及bitmap占用内存大小计算
一张实际宽1024px,高1024px的图片,手机1080*1920, 5英寸,放在ldpi,hdpi,x-hdpi,xx-hdpi哪个文件夹最节省内存消耗?占用多少内存?为什么?(默认使用ARGB_8888)手机 dpi= 开庚号(1080*1080+1920*1920) ÷ 5 = 440xx-hdpi:缩放比例 scale=440/480 =0.917图片占用内存大小:(1080*scale)*(1080*scale) * 4 ÷ 1024 ÷ 1024 = 3.75Mx...原创 2020-06-10 13:51:55 · 587 阅读 · 0 评论 -
人脸识别功能应用大致流程简介
1、打开相机。2、定时发送图片(Observable)。3、本地jni从图片中提取图像数据:抓取框坐标、头部位置,脸部质量、亮度,特征位置等,关闭相机停止发送图片。4、在线计算或本地jni计算提取特征点数据。5、本地jni对比特征点信息和人脸图像库。6、返回匹配的人脸索引。7、根据提前存储的人脸库和人脸索引,返回识别成功的人脸信息。...原创 2020-04-17 18:07:27 · 628 阅读 · 0 评论 -
Android ConstraintLayout app:layout_constraintHorizontal_bias详解
想必大家都对Google新贵ConstrainLayout的使用爱不释手。今天在使用app:layout_constraintHorizontal_bias属性的时候遇到点小疑问,研究了一会儿才知晓bias值的意义:即bias值=子View左相关的长度/(子View左相关的长度+其右相关的长度),默认值为0.5。在此记录并分享以下两种示例:假设子view的宽度是父布局的1/2,父布局的宽度视作...转载 2020-04-13 17:50:35 · 5524 阅读 · 0 评论 -
Android M(API23)以后需要动态申请权限的那些坑
1. Android 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了。 group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GE...转载 2020-04-13 17:48:54 · 173 阅读 · 0 评论 -
Webrtc视频黑屏问题 Android H264 硬解码支持更多的机型(cpu)问题
问题现象是webrtc,视频连接正常,但是视频是黑屏,不显示。原因就是原生webrtc默认支持使用了高通,英特尔和三星CPU等国际大厂的机型,很多小众的机型或者新生的CPU没有开启支持,需要我们手动添加。修改文件:HardwareVideoEncoderFactory.java和MediaCodecVideoDecoderFactory。依赖包是java源码,把之前以来webrtc的去掉,直接...原创 2020-03-26 18:05:11 · 3490 阅读 · 0 评论 -
android相机开发setParameters failed错误
最开始遇到这个错误,首先检查参数 setPreviewSize,需要设置设备支持的预览尺寸 val params = camera.parameters for(size in params.supportedPictureSizes){ if(size.width == previewSize.width){ ...原创 2020-03-12 12:09:39 · 1542 阅读 · 0 评论 -
Kotlin NoClassDefFoundError Failed resolution of: [Lkotlin/reflect/KProperty;异常处理
公司kotlin项目导出sdk,aar包,然后新建demo时,前后遇到了如所示2个错误:java.lang.NoClassDefFoundError: Failed resolution of: [Lkotlin/reflect/KProperty;java.lang.NoClassDefFoundError:Failed resolution of: Lkotlin/jvm/inte...原创 2020-03-04 14:07:36 · 4448 阅读 · 1 评论 -
Android设备唯一标识符(适配Android Q)
Android设备唯一标识符(适配Android Q)https://blog.youkuaiyun.com/ckq5254/article/details/102555930转载 2019-10-15 16:15:43 · 283 阅读 · 0 评论 -
记一次因请求参数太长引发的"惨案"(retrofit+okhttp)
一个项目中有使用到retrofit+ NanoHTTPD(本地服务)。然后在客户现场测试使用时出现本地服务之间通信出现了异常,消息发不出去。拿到相关log后,一查,是json参数解析出错了,发现传递的参数很长,所有字符加起来有1W+,应该是url长度问题,这块是之前同事开发的,当时没料到会有这么长的参数。经过测试,减少长度后是没有问题的。然后查了相关资料如下:"The H...原创 2019-07-08 11:30:01 · 1820 阅读 · 0 评论