技术
文章平均质量分 56
胖子爱你520
安卓移动应用开发工程师
展开
-
Android+jacoco实现代码覆盖率最正确的实现方式,没有之一!
前言 :jacoco是Java Code Coverage的缩写,是Java代码覆盖率统计的主流工具之一。关于jacoco的原理介绍的文章在网上有很多,感兴趣的同学可以去找别的博客看看,我这里不做赘述。它的作用是在安卓项目的代码覆盖率统计使用了jacoco的离线插桩方式,在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试(单元测试、UI测试或者手工测试等)插过桩的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。在我接到这个需求,需要统计开发人.原创 2021-04-13 14:59:09 · 99253 阅读 · 12 评论 -
阻塞队列实现生产者-消费者模式
public class Test { private int queueSize = 10; private ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(queueSize); public static void main(String[] args) { Test test = new Test(); Producer producer = test.new Produc原创 2021-01-08 18:42:40 · 2170 阅读 · 0 评论 -
Android获取桌面启动图标的位置
Android系统默认会将用户点击的“桌面图标”的位置发送给启动页MainActivity,以此来实现某些系统的过渡动画,所以在MainActivity中调用下面的代码是可以得到当前App的icon坐标的。public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan原创 2020-05-24 16:44:54 · 3634 阅读 · 0 评论 -
Android利用反射下拉出通知栏
因为并没有公开的API提供这个功能,所以只能通过反射来调用了,简单demo如下:import android.content.Context;import android.os.Build;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;原创 2020-05-24 11:11:51 · 2523 阅读 · 0 评论 -
Android动态代理实现修改App版本号
应用场景通过这个案例,我们可以了解一下动态代理技术,并且能够在不改变版本号的情况下,动态修改版本号进行升级功能的测试,主要实现原理是通过动态代理getPackageInfo()来mock数据。一、创建PackageManagerHook代理类public class PackageManagerHook { /** * 越早hook越好,推荐在Application.attachBaseContext中调用 */ public static void hook(final Cont原创 2020-05-19 11:55:48 · 4468 阅读 · 0 评论 -
快速有效解决Fragment中onActivityResult不回调的问题
应用场景:MainActivity嵌套了四个Fragment,信誓旦旦的在Fragment中打开一个功能页QrCodeActivity,在QrCodeActivity页面setResult(RESULT_OK, resultIntent);但是我的Fragment中的onActivityResult方法并没有执行到回调,网上有很多种方法,有的很复杂,下面提供一种简单有效的解决方案。1.在Fragment对应的MainActivity中,重写了onActivityResult方法,确保加上super.onA原创 2020-05-18 20:03:36 · 4869 阅读 · 1 评论 -
Android设置android:elevation无效?那是你的姿势不对!
因为本人开发的一个app是套壳应用,所以MainActivity可能会被多个product用到,最开始在某一个product开发UI的时候用到了android:elevation这个属性,能够营造出阴影的效果,没有任何问题。过了一段时间另一个product也需要用到MainActivity,因为是套的是webview加载H5页面,H5开发小伙伴用到了一个绘制图表的功能,但是最终运行到app的时候发现图表无法正常展示,当时查了半天这个问题是因为Activity开启了硬件加速,当把MainActivity的an原创 2020-05-13 17:41:28 · 56013 阅读 · 0 评论 -
Android系统启动流程介绍
前言:本文只将最近看书了解到的知识点进行一个浓缩总结,并没有对其中流程进行详细介绍,都是些C/C++代码,流程也比较复杂,可能这篇文章对没看过源码的人会很懵逼,也不知道实现原理,后续有精力再整理吧~一、整体流程1.启动电源以及系统启动当电源按下时引导芯片代码从预定义的地方(固化再ROM)开始执行。加载引导程序BootLoader到RAM中,然后执行。2.引导程序BootLoader引...原创 2020-01-10 22:57:12 · 47980 阅读 · 0 评论 -
SharedPreferences使用性能优化
前言:SharedPreferences是开发中很常见的一个类,它的主要作用是持久化存储本地的一些轻量级数据,便于我们做一些简单的数据存储和逻辑判断,因为它简单和无结构化的特点,对于一般简单的业务场景来说,比数据库更加实用,本文主要说明一下在使用过程中的性能优化注意事项。1、避免存储大量数据SharedPreferences设计之初就是为了提供一个轻量级的数据存储方案,所以它不能和数据库相...原创 2020-01-05 15:36:15 · 58939 阅读 · 0 评论 -
好的技术文章收集整理,看这一篇就够了
前言:本篇博客仅作收集整理之用,将平时看到的比较好的文章整理一下,便于自己反复温故,也为他人提供便利,如有侵权,敬请联系我删除,感谢!1.Android图片加载库比较...原创 2020-01-04 14:52:05 · 48789 阅读 · 0 评论 -
Android App压力测试
前言:写这篇文章的原因呢,一是因为不少同学作为Android开发,很少会自己去做压力测试,不了解相关的技术,不知道压力测试是什么、怎么工作的;二是询问过身边的一些测试同学,他们进行压力测试的时候,很多情况只是执行monkey的随机操作,也有部分同学不会写测试脚本,那么本篇文章就应运而生了!一、背景1.为什么要进行压力测试?我们都知道一款产品上线之前都需要进行的一步操作就是测试验收,那么人...原创 2019-11-24 21:01:19 · 28655 阅读 · 0 评论 -
Android实现ViewPager视差动画效果及背景渐变过渡
在上一篇文章(TabLayout与ViewPager配合使用踩坑总结)中我记录了TabLayout搭配ViewPager使用过程中的踩坑过程,那么这一篇文章我来写一下ViewPager切换的视差动画效果及背景渐变过渡是如何实现的!一、视差动画实现惯例首先来看看ViewPager的切换效果:注意下方的三行文字,在切换的时候是有一个视觉差的,也就是它们仨不是以同一个偏移量移动,可以看到名称那一...原创 2019-11-09 12:14:27 · 67147 阅读 · 6 评论 -
TabLayout与ViewPager配合使用踩坑总结
前言:TabLayout是个神器,Android系统提供的一种控件,和ViewPager搭配使用,能帮助我们很快捷的实现头部Tab点击切换和ViewPager滑动关联滑动的动画效果,但是在我近期的使用过程中,还是发现了一些坑,耗费了一点时间,发现问题后简直被自己蠢哭了,特此记录一下使用中的坑,供大家参考。先来看看我们将要实现的一个效果吧:这是我们最终版的效果,那么其中的过程是什么样的呢?...原创 2019-11-08 20:07:21 · 79391 阅读 · 0 评论 -
Android基础编译流程
前言:该文章为学习笔记,记录Android知识点,大家一起学习。Android工程的构建打包是一个非常复杂的流程,涉及工程源代码、资源文件、AIDL文件,以及工程所依赖的库文件的编译转换。编译流程非常灵活,因此了解它的一些底层工作原理会很有帮助。从谷歌官网上找到一张典型的构建流程图:https://developer.android.com/studio/build/index.ht...原创 2019-10-31 11:29:11 · 81888 阅读 · 0 评论 -
Java中常见的类加载器及双亲委派机制的原理
相信不少的同学在面试的时候会被问到一个词:双亲委派,懂得同学懂,不懂的同学可能会尴尬一笑,那么今天咱们就来聊聊这个问题的原理,首先我们需要了解一下java中常见的几种类加载器。一、Java中常见的类加载器1.BootstrapClassLoader纯C++实现的类加载器,没有对应的Java类,主要加载的是jre/lib/目录下的核心库2.ExtClassLoader类的全名是...原创 2019-10-27 15:12:35 · 83617 阅读 · 2 评论 -
Android判断是否有网络连接及相关设置
很多时候我们可能需要对当前手机或者模拟器的联网状态进行判断,如果是没网状态下,我们会给出相应的UI界面提示,提醒用户设置网络,进一步可以根据手机现在的网络状态判断是3G网络还是WIFI网络,当一个应用是视频等高速耗费流量的时候,我们需要对此进行提示告知用户是否需要切换网络,这个时候我们需要拿到系统服务的消息,判断当前的一个网络状态,利用下面的代码就可以解决这个问题。/** * 检测手机网络是否可用原创 2015-08-11 16:17:05 · 742 阅读 · 0 评论 -
Android+Java知识点总结-持续更新中(为了更好的自己)
前言:大家好,最近不管是看书也好,看博客也好,看到许多自己曾经看过但是可能时间久了有点记得不太清的内容,于是乎就想以后要是这种情况,现在何不随手记录下来呢,方便自己以后阅读回顾,同时也可以给大家提供帮助,所以在很长的一段时间内,我都会简短但是清楚的说明一个知识点,考虑到如果每个知识点都写的非常详细的话,篇幅会很长,并且查找起来也非常费力,所以如果有关的重点,我会单独的抽取出来详细讲解,本篇博...原创 2016-09-01 21:54:50 · 69816 阅读 · 3 评论 -
Thread使用start和run方法启动线程有什么区别?
写在前头:近期或多或少的去了一些比较优秀的企业面试,现在的企业要求比较高,当然也可能和你面试的岗位有关,一定的工作年限需要有对应的知识的深度和宽度,并且会发现一个特性,就是面试官非常注重你的基础知识的理解和掌握能力,比如说去面试Android开发,但是可能会问你很多的java知识,包括Http和Https,还有网络通信,H5数据交互等等知识点,那么我们应该如何应对这些呢,答案只有一个,多看多...原创 2018-04-14 12:35:05 · 31096 阅读 · 12 评论 -
Android中IntentService实现原理详解
写在前头:近期或多或少的去了一些比较优秀的企业面试,现在的企业要求比较高,当然也可能和你面试的岗位有关,一定的工作年限需要有对应的知识的深度和宽度,并且会发现一个特性,就是面试官非常注重你的基础知识的理解和掌握能力,比如说去面试Android开发,但是可能会问你很多的java知识,包括Http和Https,还有网络通信,H5数据交互等等知识点,那么我们应该如何应对这些呢,答案只有一个,多看多...原创 2018-04-14 15:01:14 · 32735 阅读 · 0 评论 -
Android自定义实现PullToRefreshRecycleView刷新加载控件原理和使用
写在前头:PullToRefresh这个下拉刷新上拉加载更多的控件相信大家并不陌生,Github上搜索也有很多相关的控件,并且star数量也不低,但是呢如果你想拥有很高的自由度的话,那么还是敌不过自己实现一个或者你能把开源的控件源码看明白然后基于上面自己修改成自己需要的样式,那么我就是干了这件事,在网上看到一篇博客,然后下载源码看了看,然后就想将它进行改造一番,那篇文章的地址我是真的找不到了...原创 2018-06-01 11:58:51 · 28204 阅读 · 1 评论 -
解决android studio编译后部分代码单词显示不全,吃字漏字的问题
今天碰到这个问题是个很偶然的情况,如图所示: 其实这个时候都单词是完整的,按住control+鼠标能够显示完整,但是就是看上去漏字,在网上查了一些方法,什么重启电脑+AS,重新编译,清除build文件夹内容再编译等等骚操作以后,都没有解决这个问题,后来我咨询了一些别的开发小哥哥小姐姐,终于有一位大佬提供的方案能完美的解决这个问题,秘技如下: 按照图中所示的操作,能完美解决吃字漏字的问题...原创 2018-07-12 11:33:19 · 32461 阅读 · 3 评论 -
Android解决MyScrollView包含RecyclerView刷新数据会滑动到RecyclerView顶部的问题
首先要说说MyScrollView是什么东西,其实这个控件大家用过的话都会了解,Android原生自带的ScrollView中如果包裹了RecyclerView或者ListView等控件的话,那么运行效果不尽如人意,主要体现在RecyclerView或ListView等数据不能完全显示出来,这是因为系统内部对这些并没有处理,所以这个时候MyScrollView基于ScrollView进行了改造,使...原创 2018-10-31 13:16:12 · 38216 阅读 · 1 评论 -
AndroidMainfest.xml文件中allowBackup=true有什么风险?
前言:最近接到公司安全中心同学的邮件告知开发中的一款App存在数据备份及隐私泄漏的风险,具体为AndroidMainfest.xml文件中allowBackup=true,之前一直没有专门了解过这个属性的作用及有什么隐藏的风险,于是上网搜索了一下相关资料,发现这个属性还挺有意思的,包括属性的影响到底有多大和潜在风险啥的,于是记录此文,谈谈自己的理解。准备工作在我们开始演示之前,先做一些准备...原创 2019-01-02 20:25:45 · 36450 阅读 · 1 评论 -
如何给PDF文件添加文字水印?
在最近一次自己捣鼓中,发现给PDF添加文字水印并不方便,有的说要下载Adobe的软件,有的在线pdf添加水印的网站,试过之后发现只能添加一个水印文字,并不能像我希望的那样能够全屏铺满,然后在搜索结果中发现了能够用itextpdf这个库用代码的方式给PDF添加水印,但是当中过程也是曲折,特此记录一下,并说明当中的坑。这里直接贴上java代码:public class PDFWaterMark {...原创 2019-02-19 14:13:34 · 36436 阅读 · 0 评论 -
如何正确的判断当前的Fragment是否对用户可见?
前言:写这篇文章的背景是最近做项目处理Fragment中曝光埋点逻辑时,发现当我切换到其他的Fragment时,页面从不可见到可见的过程中,已经隐藏的Fragment的onResume方法仍然会执行,究其原因是因为Fragment的生命周期是跟随其载体Activity的生命周期走,所以这个时候载体MainActivity从onPause->onResume过程中,会触发每个已经存在了的Fr...原创 2019-03-17 21:18:37 · 44606 阅读 · 0 评论 -
用LiveData实现新的事件总线
背景:在Android系统中,我们开发的时候不可避免的会用到消息传递,页面和组件之间都在进行消息传递,消息传递既可以用于Android四大组件之间的通信,也可用于主线程和子线程之间的通信。从一开始Android书本中学习的Handler、BroadcastReceiver、接口回调等方式,到我们现在广为使用到的greenrobot家的EventBus,Square家的Otto,还有依托响应式编程...原创 2019-05-22 10:59:16 · 56195 阅读 · 0 评论 -
Android实现多渠道打包,动态替换包名、Icon、图片等资源,解决因applicationId和BuildConfig路径不匹配的问题
前言:Android实现多渠道打包,这个问题并不新鲜,解决方案是固定的那么几种,网上的博客也有很多,我这里只是针对近期开发中遇到的坑进行整理,方便自己方便他人。一、初识productFlavors无疑要实现一个壳工程打出不同样式的包,这个技术解决方案Android已经替我们考虑到了,也就是使用Gradle中的productFlavors,在做定制或适配的时候,不需要建立多个工程、来回切换项...原创 2019-07-17 15:19:12 · 67864 阅读 · 5 评论 -
Android实现真正的344格式化手机号码输入框
前言:在最近一个项目的登录页上,输入手机号码这个输入框,UI稿要求显示344样式的格式化手机号码,例如“130 1234 5678”,在之前其实也有过类似的需求,但是在实现344格式化手机号码的过程中或多或少碰到不少坑,当时也没有深究,以项目排期紧为由将需求拍回去了,折中的方案是设置输入框的android:inputType=“phone”,android:maxLength=“11”,这是最常...原创 2019-08-08 20:40:57 · 28939 阅读 · 5 评论 -
JAVA学习笔记23——Redis详解
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/79181080 今日内容: 掌握Redis的安装 掌握redis常用数据结构(string/hash/list/sortedset)的存取数据方法 掌握Jedis的用法一、Redis介绍1.1 什么是NoSQL?NoSQL,泛指非关系型原创 2018-01-29 15:18:02 · 4297 阅读 · 1 评论 -
ActiveMQ点击Queues选项报503错误的解决方法
今天在使用ActiveMQ时发现一个问题,因我的程序运行在Linux环境下,所以这里介绍一下如何解决Linux环境的方法。当我们在Linux中运行起来ActiveMQ了以后,我们在windows中打开服务器访问http://192.168.25.88:8161/admin/,这里将域名替换为自己的服务器地址,端口号8161是ActiveMQ自己的后台运行的端口号,这里不变,后面跟上admin进原创 2018-01-09 12:26:47 · 3833 阅读 · 0 评论 -
React和Redux的连接react-redux
最近,在其他的博客中看到一篇好文章,可以帮助大家理解什么是react-redux,原文地址:https://leozdgao.me/reacthe-reduxde-qiao-jie-react-redux/原文如下:之前一直在探索React相关的东西,手上有个SPA项目,于是准备上Redux试试水。Redux本身和React并没有之间的关联,它是一个通用Javscript App模块,用做App S转载 2016-04-06 14:01:06 · 1821 阅读 · 0 评论 -
React Native之ScrollView通过map()方法动态加载数组
大家好,时隔几天,我又开始更新新的博文了,最近由于有新的学习任务,比较头疼,加上刚刚过去的清明假期去长城锻炼身体了(微信公众号有彩蛋哦,欢迎关注),闲置了几天时间,所以今天赶紧的再来一发。上次写的关于ViewPaperAndroid这个控件的使用,大家反响很热烈,可以看出React Native现在已经越来越受到关注了,我最近学习的东西也是和RN有关,为了更好的管控RN中的state,这点以后再说,原创 2016-04-06 10:03:25 · 18700 阅读 · 2 评论 -
React Native之ViewPagerAndroid仿淘宝首页顶部分类布局效果实现
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/51030410大家好,趁着现在别人都去吃饭的时间,来给大家讲一讲React Native中Android部分的控件ViewPagerAndroid的讲解,这里特别提醒一下,我写的博客都是基于大家有一些React Native基础的前提下,因为关于React Native这一系列的博原创 2016-03-31 21:38:20 · 9547 阅读 · 0 评论 -
React Native之序言
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/51018447大家好,由于本人最近正在从事用React Native开发原生APP的工作,从刚开始入门的小白,到现在的慢慢熟悉React的工作原理以及使用方法,所以决定将这一阶段的工作记录下来,和大家一起学习这门新技术,因为我觉得React Native技术可能在不久的将来,也许啊原创 2016-03-30 19:25:04 · 789 阅读 · 0 评论 -
Android使用动画的注意事项
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/50395008在Android开发过程中我们都知道,有一些比较酷炫的效果都是通过动画来实现的,Android提供了View动画、帧动画和属性动画三种动画,具体的使用方法和介绍网上有很多的介绍,这里我不做多余的赘述,在这篇博客里呢,我想就使用动画的一些注意事项做一些说明,希望对大家有原创 2015-12-24 15:58:29 · 1691 阅读 · 0 评论 -
Android如何获取系统联系人数据?
很多时候我们的需求当中都会涉及到获取系统联系人的数据,那么我们怎么才能拿到系统联系人的数据呢?这里我们就需要用到Android系统自带的一个ContentResolver工具获取了,结果返回一个cursor数据集,我们通过遍历cursor数据集,类似于Map集合一样,通过key就可以拿到value,同理我们也是分别获取DISPLAY_NAME和NUMBER两个key值,就可以拿到对应的value值,原创 2015-08-11 16:34:17 · 828 阅读 · 0 评论 -
Android如何实现程序按下两次返回键退出应用程序?
在很多应用中存在这样的一个业务逻辑,即要求我们实现按下两次返回键的时候才退出应用返回桌面,那么我们怎么实现这个业务呢?其实方法很简单,设置一个时间,当我们按下第一次返回键的时候,记录下这个时间,当我们按下第二次返回键的时候再记录下当前时间,通过两个时间的对比,设定如果两个时间的按下间隔小于2000毫秒(也就是2秒钟)的时候才退出当前应用,否则就给出提示“再按一次退出程序”,这样的用户体验就比较好了,原创 2015-08-01 18:42:59 · 981 阅读 · 0 评论 -
Android如何实现点击一次返回键返回桌面而不是退出应用?
有时候我们的应用我们希望他点击一次返回键的时候不是退出应用而是返回到桌面,比如像QQ和微信等聊天软件,在主界面点击返回键的时候不是退出应用而是返回到桌面,那么怎么能够实现这种需求呢?其实也很简单,只需要重写onKeyDown()这个方法,在方法里面实现返回的代码,这样就可以实现这个需求了,具体代码如下所示:@Overridepublic boolean onKeyDown(int keyCode,原创 2015-08-11 16:52:08 · 12725 阅读 · 0 评论 -
Android自定义ImageView实现图片缩放滑动,双击放大缩小,多点触控缩放
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/47445605大家好,最近研究学习了一个自定义控件,ZoomImageView,安卓自定义缩放图片的控件,支持双击放大双击缩小,多点触控拉伸放大与缩小,并且很好的控制了图片的位置,不会出现缩小图片后图片左右出现空白的情况,缩小到默认值的时候,图片会居中填充窗口,可以推荐大家学习一下原创 2015-08-12 15:34:11 · 7744 阅读 · 2 评论 -
Android使用Universal-ImageLoader在ListView中加载网络图片简单示例
大家好,最近在问答专区上看到了很多朋友问如何加载网络图片或者加载网络图片失败的问题,因为之前没有整理过类似的文章,但是也不能把别人的文章地址复制过来吧,这也是对自己的不尊重是吧,hiahia~,所以决定立即写一篇博客,介绍一下Universal-ImageLoader这个强大的工具的用法,虽然不是很详细,但是我自己写了个小demo,代码比较详细,大家也看的明白,如果有不懂的可以继续发私信我,我会一一原创 2015-08-16 16:18:38 · 2001 阅读 · 0 评论