
Android
文章平均质量分 72
介绍Android的相关知识,并记录一些常见的问题
Fantasy丶Lin
一个爱看综艺、爱看电影、爱听周杰伦的歌的程序猿。涉猎Android、Flutter等技术。
展开
-
Android 判断当前设备是手机还是平板的最有效的方法【2022版】
之前已经写过一篇文章介绍了,详见《Android判断当前设备是手机还是平板的最有效的方法》但是经过一段的时间的使用,发现在一些学习机上会出现误判。学习机明明是10英寸的,但是代码算出来的结果却是5英寸。我猜应该是学习机的硬件信息有误造成的。竟然会误判,那该怎么办呢?.........原创 2022-07-22 15:44:30 · 8021 阅读 · 4 评论 -
Android 判断当前设备是手机还是平板的最有效的方法
如果你百度一下,如何判断当前设备是手机还是平板,搜索到的结果一般都是下面这个。原创 2020-12-27 23:07:28 · 13709 阅读 · 6 评论 -
剖析 SharedPreferences apply 引起的 ANR 问题
项目中 ANR 率居高不下,从统计上来看排在前面的有几个都是 SharedPreferences(以下简称 SP)引起的。接下来我们抽丝剥茧地来分析其产生原因及如何解决。crash 堆栈信息如下。从 crash 收集平台上来看,有几个类似的堆栈信息。唯一的区别就是 ActivityThread 的入口方法。除了 ActivityThread 的 handleSleeping 方法之外,还有 handleServiceArgs、handleStopService、handleStopActivity。转载 2020-11-15 22:16:39 · 1843 阅读 · 0 评论 -
你真的了解WebView么
WebView 是我们前端开发从PC端演进到移动端的一个重要载体,现在大家每天使用的APP,WebView 都发挥着它的重要性。接下来让我们从 WebView 看世界。转载 2020-07-11 19:10:45 · 922 阅读 · 0 评论 -
Android检测模拟器
模拟器大家都应该很熟悉的吧!现在市面上的模拟器多的数不清,例如:雷电模拟器、夜神模拟器等等。而因为模拟器所搭载的Android系统是阉割过的,一些安全相关的功能都没有了。这就造成了一个安全问题,在模拟器运行的APP,可被动态调试、抓取数据等,从而增大APP被破解、敏感数据遭泄露的风险。所以一些公司就会禁止用户在模拟器中使用他们的APP。原创 2020-06-20 22:11:15 · 7797 阅读 · 0 评论 -
Android差异化打包,实现一套代码打出不同的APP
当一个APP成熟起来,功能会越来越多,业务会越来越复杂,面向的用户群越来越大。这个时候为了更进一步的发展和扩大业务,我们可以对APP进行拆分,做成两个甚至更多个的APP,每个APP都服务特定的用户群。为了缩短开发时间,降低维护成本,肯定是不能再单独新建一个项目工程的。那怎么在原有的项目工程来进行开发,从而实现一套代码能够打出不同的APP呢?这就是本篇文章要介绍的“差异化打包”。原创 2020-05-30 22:37:06 · 4588 阅读 · 11 评论 -
面试常客:Intent 能传递多大 Size 的数据?| 附阿里的建议
作为 Android 开发,日常 Coding 时,最频繁的操作应该就是操作 App 内的一系列 Activity。而在 Activity 间传递数据,就需要借助 Intent。不少资料中写到,Intent 在 Activity 间传递基础类型数据或者可序列化的对象数据。但是 Intent 对数据大小是有限制的,当超过这个限制后,就会触发 TransactionTooLargeException 异常。那么今天就来聊聊 Intent 传递大数据时,为什么会抛异常,以及如何解决它。转载 2020-05-13 11:32:00 · 1158 阅读 · 0 评论 -
Android WebView传字符串给JS,时好时坏,为啥?
做过与H5交互相关的工作的同学,应该是知道如何传值给H5的。WebView有一个方法 evaluateJavascript() ,这个就可以用来执行JS代码,即可以调用H5已经定义好的JS函数,当然我们也可以顺便传值过去。原创 2020-04-30 11:52:17 · 1812 阅读 · 0 评论 -
Android WebView播放视频并支持全屏
支持视频在线播放的网页随处可见,前端开发不需要做太多的工作就可以实现大多数需求。因为播放视频的具体功能是由浏览器核心在处理的。我以为Android的WebView应该是默认支持视频播放的,不会有太大的问题,但是经过测试后,还是发现了不少坑。主要有两个:有些手机,无法正常播放视频,出现白屏或者只有声音没有画面等;视频无法全屏播放。原创 2020-02-13 16:25:09 · 7475 阅读 · 0 评论 -
Android Studio如何连接第三方模拟器
如果大家用过Android Studio自带的模拟器,应该都深有体会,很吃电脑配置。如果电脑配置较差,模拟器用起来那叫一个卡啊!不过现在市面上有很多种模拟器了,例如:夜神模拟器、雷电模拟器等等,都蛮不错的,用起来不卡。接下来就简单说一下如何使用吧!原创 2020-04-11 17:20:21 · 116487 阅读 · 1 评论 -
Android面试必问,事件分发机制
事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的。事件分发的对象是点击事件(Touch事件),而当用户触摸屏幕时,将产生点击事件。转载 2020-04-07 10:40:46 · 2760 阅读 · 0 评论 -
Android WebView的默认缓存策略
今天测试反馈,前端更新了H5的内容,但是客户端通过webview的方式打开后,发现内容没有更新,使用charles抓包,发现客户端访问访问时,连请求都没法发出。于是测试的妹子在企业微信中@我,看到消息有点懵,记得去年就排查过webview的缓存方式,怪没有记录,今天决定把问题重新记录一下。转载 2020-03-31 10:47:42 · 6108 阅读 · 1 评论 -
Android知识图谱:我们到底需要学习哪些Android知识?
如果你也学习Android,那么你大概率会看过我的文章。经常有读者给我留言:“该怎么学习Android?”、“日常学习Android的方法是什么”。所以,今天,我将献上一份《Android知识图谱》,以自身的经验 & 所见所闻,旨在告诉大家,学习Android,实际上需要学习什么内容,希望你们会喜欢。转载 2020-03-25 10:53:31 · 957 阅读 · 0 评论 -
懂球帝Android客户端WebView优化之路
H5页面承载了懂球帝文章、活动、广告等核心业务场景,所以经过了长期的迭代之后,懂球帝客户端H5相关的业务也非常复杂,这里面包含了分享、支付、用户评论、点赞等交互,各种业务交织杂糅在一起,导致这一块的代码难以维护。笔者对业务进行了全面的梳理,在重构这块业务的过程中也收获了很多,同时考虑到很多产品都有相似的应用场景,分享出来希望对大家有帮助。介绍下全文的结构和思路,首先笔者对现有业务进行抽象,提取出其中的调用关系和信息流,第二部分简单地介绍了项目中之前采用的方案和缺点。第三部分着重介绍了新的设计架构。第四部分则转载 2020-03-15 11:03:04 · 2704 阅读 · 1 评论 -
解决 Android 10 获取不到定位信息的问题
最近国内很多手机厂商都推送基于 Android 10 开发的自家系统了。之前其实已经对公司的APP进行适配了,但还是发现了新坑。那就是定位的问题。已经申请了定位权限,但是依旧无法进行定位。我用的是高德的定位,项目工程的 targetSdkVersion 为26。经过不断尝试,最后才发现,竟然要开启手机的定位服务,才能获取到定位信息。原创 2020-03-14 10:43:24 · 7182 阅读 · 2 评论 -
Android App 架构设计相关资料汇总
只要有1,2年工作经验的程序员,多多少少都会接触到架构东西。可能平时工作中不一定会有机会从0到1完完全全自己去设计一套架构出来,但是如果想成为高级工程师,技术专家,架构师……尽早接触架构方面的知识是有利无害的。我收集了很多材料,现在汇总在这里,方便查阅。原创 2020-03-05 22:51:41 · 2387 阅读 · 0 评论 -
Android框架式编程之架构方案
目前移动端应用市场已经是百花齐放,很多独角兽公司都是通过App创业发展起来的,现在App类型更加丰富,功能越来越完善,基本上涵盖了各个行业的每个角落。为了开发出更加有竞争力的App,不仅需要功能上有创新,内容也需要更加多元化,这样就出现了相对巨大的工程。这些工程代码不停添加,如果没有一个好的架构,那么所有代码都会强耦合在一起,功能之间也会出现很多依赖,那么就会出现很多问题转载 2020-03-01 18:09:11 · 625 阅读 · 0 评论 -
Android WebView拍照和上传文件
拍照上传或者上传图片、视频、文档等文件,这种需求对于移动端来说是很基本的。Android原生实现这种需求没什么特别大的难度。但如果是嵌套的H5页面的话,就需要踩点坑了。Android 的这个 WebView 真是个不让人省心的控件啊!原创 2020-02-22 17:35:55 · 1941 阅读 · 0 评论 -
Android清除WebView缓存
用过WebView的同学都清楚,WebView默认是会自动缓存网页资源的。虽然前端H5网页有自己一套缓存机制(不懂的同学,可以看看这篇文章手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案),但是在某些场景下,还是需要原生主动去做清除缓存操作,即清除WebView的缓存。大多数文章都会说,使用下列的方法就可以清除了。原创 2020-01-22 10:33:57 · 5821 阅读 · 0 评论 -
Android WebView加载H5页面,H5页面使用URL Scheme唤起APP失败
最近遇到了一个问题,H5页面使用URL Scheme唤起第三方APP,在手机浏览器已经测试通过了,但是在APP里面,却失败了。本篇文章不介绍如何使用URL Scheme唤起APP,如果想知道的朋友,可以查看下列文章:Android URL Scheme Android 利用scheme协议进行跳转 qq. 微信分享出去的页面。如何唤起app,调到指定的页面回归正题,我们...原创 2019-12-20 18:18:33 · 6264 阅读 · 1 评论 -
Android Studio打包生成自定义文件名的apk
Android Studio打包生成自定义文件名的apk Gradle 4.0以前在app下面的build.gradle文件中,添加如下代码即可。apply plugin: 'com.android.application'static def getTime() { return new Date().format("yyyyMMdd_HHmm")}android { compileSdkVersion 28...原创 2019-12-14 15:51:37 · 841 阅读 · 0 评论 -
移动端跨平台技术相关资料汇总
移动端的跨平台技术已经发展了很多年,涌现出了很多技术,越来越成熟,就像这两年比较火的Flutter,就是跨平台技术的一种。我接触跨平台技术也有几年,收集了很多材料,现在专门在这里汇总,方便查阅。原创 2019-12-02 17:26:29 · 1192 阅读 · 0 评论 -
Android使用WebView定位问题
最近遇到了一个问题,有一个需求是使用 WebView 来加载一个网页url,H5通过js来获取位置定位信息。以前也进行过H5需要位置信息的功能开发,不过以往的方案都是使用 Android 原生定位(集成高德/百度SDK),再将位置信息传给H5来实现,不过这次由于考虑到apk大小的问题(不再集成高德SDK)以及“懒”(不用再写定位的代码),所以就准备都让H5来做。本来认为这个方案应该是很简单的,没想到遇到了一个大bug——H5无法获取到位置信息。此时本想第一时间甩锅给H5(我的代码怎么可能会有问题?!!),然转载 2019-10-24 09:37:43 · 794 阅读 · 0 评论 -
Android为页面添加水印
现在市面上,有很多APP在一些关键页面上会有水印,水印一般都是一些身份相关的信息,这样可以保证截屏后的图片具有识别性,能够知道这张截图是谁截取的。原创 2019-07-29 17:14:58 · 11109 阅读 · 18 评论 -
使用Java实现RSA加密解密
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。这里提供一个在线进行RSA加密解密:http://tool.c...原创 2019-08-25 21:53:57 · 1799 阅读 · 0 评论 -
使用Java实现信息摘要算法
在实际开发中,我们会经常用到一些不可逆的加密算法,例如:MD5算法、SHA1算法、信息摘要算法,还有哈希算法等等。如果没有好好学习一些,真得会搞混的。所以我查找了相关资料,在这里简单介绍一下。消息摘要算法分为三类:MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 HMAC(Hash-based Message ...原创 2019-09-02 17:40:07 · 1773 阅读 · 0 评论 -
Android WebView相关材料汇总
在APP里面嵌套H5页面已经是一件很平常的事情了。Android是通过WebView来加载H5页面的。不过Android的WebView缺陷蛮多的,需要对其进行一些优化,不然是无法很好展示H5页面的。对于WebView,我也是研究了一段时间了,收集了很多材料,现在专门在这里汇总,方便查阅。在2020新年来临之际,我创建了一个开源项目AndroidWebView,该项目重在介绍WebView的基本用法、功能优化和常见问题的解决方案等等,有较详细的demo,欢迎各位star和fork。原创 2018-12-13 15:28:22 · 8368 阅读 · 0 评论 -
Android下载文件,如何获取实际的文件名
1. 前言之前APP实现下载文件的功能,都是让后台把下载地址和文件名(包含文件后缀名)传过来。不过近日后台只传了下载地址,我懒得麻烦人家也把文件名传来,所以就自己查资料,想方法解决。2. 解决方案解决的办法如下面的代码所示,目前还算能满足要求,如果大伙们有更好的方法,可以在评论说一声。 HttpURLConnection connection = null; int...原创 2017-11-23 22:39:56 · 6620 阅读 · 2 评论 -
使用Java实现AES加密解密
AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度...原创 2019-07-12 14:57:08 · 2350 阅读 · 0 评论 -
使用Java实现3DES加密解密
3DES又称TripleDES,是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。密钥长度是128位(bit)和192位(bit)。原版DES容易被破解,新的3DES出现,增加了加密安全性,避免被暴力破解。它同样是对称性加密,同样涉及到加密模式和填充方式。加密模式有ECB、CBC、CTR、OFB、CFB。填充方式有PKCS5Padding、PKCS7Padding、ZeroPadding、ISO101原创 2019-07-10 23:14:03 · 2464 阅读 · 0 评论 -
解决在安装器中打开APP后,当APP从后台回到前台时,会重新启动的bug
1. 前言最近很意外地发现了一个系统级别的bug。具体描述如下:第一种操作:安装APP成功后,在安装器中点击“打开”,APP启动,先进入闪屏页,然后才进入首页; 按下Home键,回到桌面; 再点击APP的图标,APP并不是打开之前已经加载完的首页,而是重新进入闪屏页,然后再进入首页。第二种操作:安装APP成功后,关闭安装器,回到桌面,点击APP的图片,APP启动,先进入闪屏页...原创 2018-04-30 21:28:00 · 4328 阅读 · 0 评论 -
Android中使用MuPDF预览PDF文件,并且正常显示电子签章
1. 前言早在去年11月,项目的APP就已经集成了MuPDF,可以正常显示带有电子签章的PDF。但是,最近有用户使用了新的电子签章技术,MuPDF加载了带有新电子签章的PDF后,会报“文本重定位”的错误,有些手机(例如:华为 mate 10)会出现无法显示电子签章的情况。所以,不得不紧急处理一下。经过测试定位,最后发现是so文件报错了,报的是“文本重定位”的错。之前完全没接触过NDK开发,对s...原创 2018-03-29 23:30:40 · 4872 阅读 · 12 评论 -
Android 7.0及以上的设备无法在Eclipse上打印日志
1. 前言因为公司的老项目是使用Eclipse开发的,而且数量还不少,所以把所有项目都转移到Android Studio上来不是一个很明智的选择。虽然老项目增加新功能的情况很少,但是由于手机系统的更新,还是会出现一些兼容性问题。这个时候,就得来调试代码了。如果兼容性问题是出现在Android 6.0或者以下的手机系统里,这种情况还是很好解决的,直接找台手机连上电脑,然后用Eclipse来调试代...原创 2018-01-27 11:48:33 · 2435 阅读 · 2 评论 -
Android Studio使用Eclipse的签名文件进行打包
1. 前言最近将一个老项目从Eclipse迁移到Android Studio上来,在测试APK覆盖安装的时候,出现了一个问题。直接在“Genetate Signed APK”导入Eclipse的签名文件,然后打出来的APK在覆盖安装的时候,报错了。查阅了相关资料,找到了解决方案。2. 解决方案① 选中项目,点击 File -> Project Structure原创 2018-02-04 11:56:40 · 1258 阅读 · 0 评论 -
在Android布局文件中使用空格的方法
1. 前言在Android布局文件(XML格式的文件)中使用空格,这个是所有Android开发者会遇到的问题。有些人觉得这很简单,不就是直接敲“空格键”就可以了吗?然而实际上这种做法并不是很好,在不同手机,显示的效果会有不同。那该怎么做呢?2. 解决方案 宽度大约是一个汉字的宽度的四分之一,在不同机型会有不同表现&原创 2017-10-14 23:07:30 · 1144 阅读 · 0 评论 -
Android真机测试,连接到本地服务器的方法
1. 前言作为一名Android开发者,不管怎么说,都会经历使用Android真机来测试连接本地服务器这样的事情。这里所说的“本地服务器”大多数时候指的是:搭载有某种服务器软件的PC,例如搭载有Tomcat服务器的PC,就可以拿来当作本地服务器。2. 方法一般有3种可行的方法,具体说明如下:将应用后台服务器部署到某台可以通过公网访问的服务器上,手机访问该公网IP地址,类似于公网试用...原创 2016-12-28 20:46:35 · 23908 阅读 · 12 评论 -
Android Studio中替换aar包不生效
1. 前言最近遇到一个奇怪的问题。因为第三方的SDK要更新,是一个aar包,所以我就跟以往一样,直接复制粘贴替换掉,然后Synchronize(快捷键:Ctrl+Alt+Y) → Clean Project → Rebuild Project。可是我发现,新包的API我调用不了,Android Studio提示没有这个方法。然后我就重新按照上面的流程再走一遍,还是不行。尝试了很多次,依旧不行。...原创 2017-12-11 11:17:51 · 8996 阅读 · 2 评论 -
Android ViewPager一次性加载全部页卡,并且滑动时不被销毁
1. 前言我的ViewPager有3个页卡,目前有这样的一个需求,一打开ViewPager所在的界面,3个页卡都要全部加载完毕,并且滑动页卡的时候,任何一个页卡都不会被销毁。2. 解决方案mViewPager.setOffscreenPageLimit(2);说明:只要为ViewPager设置上面那个属性,就可以实现前言中的需求。这个属性的默认取值为原创 2017-09-27 16:33:22 · 4209 阅读 · 0 评论 -
解决Android APP启动出现白屏或黑屏的问题
1. 前言Android开发者都会有这样的体会吧!自己开发的APP,在启动APP的时候,会出现一段时间白屏或黑屏(这跟手机系统相关,不过大多数都是显示白屏的),然后才会显示APP的界面。其实这段时间的出现,是APP在启动时,需要初始化一些数据,然后才会去加载主活动(第一个Activity)造成的。那么我怎么解决呢?2. 解决方案第一步:在res/values/styles.xml文件中...原创 2017-10-27 17:29:59 · 1938 阅读 · 0 评论 -
Android静态注册广播和动态注册广播的区别
1. 前言Android中的广播主要可以分为两种类型:标准广播和有序广播。标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播信息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接原创 2017-11-24 16:37:05 · 2940 阅读 · 0 评论