手机网络信号强度的单位是 dBm
(毫瓦分贝),一般用负数表示。
正常手机信号变化范围是从 -110dBm
(差)到 -50dBm
(好)之间,如果比 -50dBm 还小的话,说明你就站在基站的附近。
2G,3G,4G 获得信号强度的方式都是重写 PhoneStateListener 的 onSignalStrengthsChanged()
方法,当信号强度发生改变的时候就会触发这个事件,我们可以在这个事件里获取信号强度。
关于 dBm
,还有一个定公式:
|
|
手机网络信号强度的单位是 dBm
(毫瓦分贝),一般用负数表示。
正常手机信号变化范围是从 -110dBm
(差)到 -50dBm
(好)之间,如果比 -50dBm 还小的话,说明你就站在基站的附近。
2G,3G,4G 获得信号强度的方式都是重写 PhoneStateListener 的 onSignalStrengthsChanged()
方法,当信号强度发生改变的时候就会触发这个事件,我们可以在这个事件里获取信号强度。
关于 dBm
,还有一个定公式:
|
|
最近在项目中遇到一个 Low on memory
内存过高导致应用退出问题,其中使用了一些内存查看命令,这里做一个记录,错误日志如下:
|
|
从日志上 18 ~ 20 行看 Lost RAM
占用太大了,而 Used RAM
占用并不大。
Free RAM:为剩余内存。
Used RAM:为用户态使用总内存。
Lost RAM:为内核态使用内存,比如 OpenGL 纹理内存、GPU 占用内存、图形显示 ION buffer 都包含在 Lost RAM 里,从字面意思是理解它是丢失的内存,也就是说它是操作系统无法解释和正常利用的内存。
其中 Lost RAM
= TotalRAM
- FreeRAM
- UsedRAM
也可以理解为其他内存。
项目地址:https://github.com/licheedev/AdPlayer
简单的广告混播实现,没有类似 ViewPager 那样的切换滚动效果。
支持加载 url、本地文件、drawable 和 mipmap(仅图片)、raw 资源、asset 文件。
可以自定义图片加载器。
可以配置图片和视频的缩放模式。
app 的 build.gradle 中添加:
|
|
这段时间在一个项目中用到了视频和图片轮播的广告,一开始我使用了 ExoPlayer 视频播放库,结果出现了一个奇葩的问题 ANR on player release #4352,我的设备系统是 Android 5.1.1 于是我尝试工程更新到 AndroidX 将 ExoPlayer
更新到最新版本,结果还是会出问题,貌似在 Android 7.0 中这个问题得到了修复。迫于这个问题的困扰,于是我放弃了 ExoPlayer 而选择系统默认的视频播放库,结果遇到了另一个令人不爽的 bug bug 详细描述。
这个问题在更高的 Android 系统中已经被修复 Fix context leak
最后变相解决 VideoView 在 Activity 中内存泄漏的方法:
创建 AudioServiceActivityLeak.java
类:
|
|
在使用 VideoView 的 Activity 中重写 attachBaseContext
:
|
|
本文转载自:https://www.trinea.cn/android/android-whether-debug-mode-why-buildconfig-debug-always-false/
Android 开发中一般会通过 BuildConfig.DEBUG
判断是否是 Debug 模式,从而做一些在 Debug 模式才开启的特殊操作,比如打印日志。这样好处是不用在发布前去主动修改,因为这个值在 Debug 模式下为 true,Release 模式下为 false。
如果应用只有一个 Module 没有问题,Debug 模式下 BuildConfig.DEBUG
会始终为 true。如果现在有两个 Module,分别为 App 和 Lib,且 App 依赖 Lib,在 Lib 内有工具类 LogUtils,代码如下:
|
|
当我们在 App Module 内调用 LogUtils 时我们会发现始终无法打印日志,因为上面的 BuildConfig.DEBUG
会始终为 false。为什么呢?
不知从那天起突然发现构建 Android 工程下载依赖库的时候会发生一个错误:
PKIX:unable to find valid certification path to requested target
这个问题我查找了网上相关资料,最后总算是解决了,在这里记录一下。
水平滚动的思路借鉴于 Android RecyclerView打造自动循环效果,但是这个不能实现循环左右移动,所以我进行了一个小修改,添加了方向这个概念,并在滚动到最顶端的时候自动改变了方向。
|
|
首先我们考虑到水平列表可以使用 RecycleView 实现:
|
|
然后我们重写一下 RecycleView 继承并使用 scrollBy()
方法来实现自动滚动。
当我们使用活体检测检测完毕后,需要上传图片给后台进行人脸识别,在 Android 里面默认的 Camera 获取的图片格式是 NV21.
怎么知道这个默认格式呢?
|
|
这个格式的图片本身虹软是支持的,但是有个条件限制:SDK 对图形尺寸做了限制,宽高需要大于 0,宽度为 4 的倍数, YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数, RGB24 格式的图片高度不限制。如果你的图片是 NV21 格式不符合这个条件就需要进行转换。
|
|
下面这些是我整理的一些常用的开源框架,在你的项目中使用它们可以起到事半功倍的效果,有的项目已经不再维护,有的项目即将停止,我只能感叹技术的发展是如此之快,在你还没有完全搞懂一个新框架之前可能这个框架已经被淘汰,我相信这些框架中的大部分会在不久被淘汰,也可能会被全部淘汰。但是这并不影响我们去学习和使用它们,因为其中的设计思维是可以长久的被我们所利用的。
最近项目中的需要,安卓设备需要安装到设备中后可能需要调试,这个时候去插线调试就不是很方便了,这个时候我想到了 WIFI 无线调试,其实这个在很早之前我就用过,很久没用了,今天索性就记录一下,方便大家参考。
首先,你的 Android 设备需要是 Root 的,而且拥有无线 WIFI 模块。
长按 WIFI 网络图标,然后在弹出的连接对话框中选择 高级选项 然后点击 IP设置 并选择 静态(如下图所示)。
注意上面的设置弹框界面要输入与你路由器相匹配的网关和网段IP地址,你路由器的网关你可以通过 PC 上面的 ipconfig
或者 ifconfig
命令来查看: