android
android小菜比
Fear can hold you prisoner. Hope can set you free.
展开
-
单元测试调研
背景:单元测试为了保证代码质量、快速迭代的需求。在重构期间,可以尽可能的测试各种边界case。在开发阶段就可以尽快的发现问题,解决问题并验证解决方案的正确性。提高开发效率,在项目迭代的时候,随着功能的增加,代码量的递增,Android app的编译、运行时间也会变长,因此必要的单元测试是必须的。更多单元测试的概述:关于单元测试的概述调研分析:常见的测试工具:1、JUnit:Junit4是Java标准测试库。2、Mockito、PowerMock、Mockk: 这些是Java 单元测试 Mock原创 2020-07-23 12:44:56 · 308 阅读 · 0 评论 -
单元测试概述
概念单元测试是为了验证代码中某个类或者方法能否按照正常输入得到预期的输出。一个情况下我们会测试共有方法即public方法,如果需要测试私有方法,需要通过mokc的方式,才能测试,在实际开发中我们已经会编写一些工具类,如果没有单元测试的助力,我们在实际测试过程中,可能对边界值的测试不足,导致线上出现问题。通过单元测试,可以准确的保证应用的稳定性,和功能的正确性。随着应用模块的不断跟新迭代,测试单元也要跟着不断变化,保证应用模块的单元测试覆盖率以及迭代的稳定性。单元测试测试的主要范围是类的共有方法,保障公有原创 2020-07-12 12:12:40 · 509 阅读 · 0 评论 -
记-Android studio使用的小疑惑
问题:Skipped breakpoint because it happened inside debugger evaluation参考文档:https://stackoverflow.com/questions/47866398/skipped-breakpoint-because-it-happened-inside-debugger-evaluation-intellij-idehttps://samny.gitee.io/2020/05/05/Skipped%20breakpoint%2原创 2020-06-18 23:19:58 · 181 阅读 · 0 评论 -
LeakCanary 2.0原理分析
LeakCanary 2.0原理背景:Android应用基于Java(kotlin)实现,因此它也将Java的优缺点继承了过来,典型的极就是内存回收问题,JVM在GC上让开发者尽量不需要关注垃圾对象的回收,但是如果开发真的不去关注内存问题就有可能造成应用的内存泄漏和OOM。比如错误使用handler、thread等都可能会带来OOM。应用程序在申请一定的内存后,内存又没有及时得到释放后就很容易...原创 2020-03-19 18:32:22 · 2951 阅读 · 0 评论 -
原生Android集成Flutter混合开发
原生Android和Flutter集成主要有两种方案:1.源码集成:官方提供的源码集成方案2.产物集成:Flutter 项目单独开发,开发完成后发布成 aar 包或者 iOS 的 framework 形式,原生项目依赖 Flutter 输出的文件即可。3.咸鱼团队的FlutterBoost 方案。FlutterBoost地址环境首先确认环境是否正确:这里重点关注一下Flutter ve...原创 2019-11-21 17:30:39 · 1775 阅读 · 0 评论 -
构建本地Jcenter、上传AAR、jar、plugin到本地Jcenter
如何构建本地Jcenter、以及上传AAR、jar、plugin到本地Jcenter文章主要介绍: (1)如何搭建本地的Jcenter仓库 (2)如何上传AAR、jar、Plugin到本地仓库 (3)如何引用自己上传的AAR、jar、Plugin (4)如何创建仓库的group,通过group可以将jcenter、maven、alibaba、google、以及自己创建的仓库等聚集一起,...原创 2018-07-14 14:30:34 · 1014 阅读 · 0 评论 -
自定义ProgressBar实现两端都是圆角,并且带有Animation。
1.实现效果2.使用到的知识点ValueAnimator的使用,具体产考文档:ValueAnimator 基本使用ScaleDrawable的使用。具体参考文档:ScaleDrawable的使用3.通用的做法使用Style实现3.1自定义 ProgressBar先从主界面布局开始看起 <ProgressBar style="@and...原创 2018-04-06 15:25:07 · 2593 阅读 · 0 评论 -
ListView实现隐藏,显示Item的部分View.以及部分问题
实现的功能1.实现动态显示,隐藏ListView的Item部分View.效果如下图所示: 点击右侧的隐藏,显示按钮,实现Item的部分布局的动态显示.涉及到的知识点1.inflate方法的不同参数的含义,以及作用 2.View的绘制过程,主要包含onMeasure,onLayout,onDraw这三个方法. 3.自定义View. 4.如何控制Item的部分布局的显示,隐藏.如何控制Item的原创 2017-04-30 15:45:57 · 11591 阅读 · 0 评论 -
彻底解决魅族手机无法彻底卸载应用的bug
使用Flyme系统的同学可能会遇到一个问题:卸载了某些软件(例如通过开发者模式调试安装的应用)后,实际这个应用还残留在系统,当你用低版本或者其他签名的apk覆盖安装的时候会提示“安装失败”,要求你卸载后重新安装。可是无论你从应用列表寻找还是清理垃圾,都根本找不到这个应用。Step1:进入手机的“设置”-“安全” (指纹和安全)Step2:选择“访客模式” Step3:打开访客模式,并记住密码 S转载 2016-10-31 20:18:58 · 3888 阅读 · 0 评论 -
Android的setVisibility(View.GONE)不起作用在使用Animation之后.
出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉setFillAfter(true)语句即可。实验证明只要在setVisibility之前设置View的mCurrentAnimation为null就可以,因此调用setAnimation(null)也是转载 2016-10-20 20:35:27 · 5628 阅读 · 1 评论 -
Android Jetpack之Lifecycles源码分析
Android Jectpack之Lifecycles源码分析Android Jetpack简介Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。Jetpack 包含与平台 API 解除捆绑的 androidx.* (android.*)软件包库。这意味着,它可以提...原创 2019-08-03 14:52:08 · 417 阅读 · 0 评论 -
Android Jetpack之ViewModel源码分析
Android Jectpack之ViewModel源码分析ViewModel 简介在Android开发的时候,使用Activity、Fragment的生命周期的变动有时候是不受开发人员控制的(比如横竖屏切换,导致Activity销毁并重新创建),各种因素导致Android界面或被系统重新创建。当Activity需要重新创建的时候,之前与之绑定的数据也会丢失(比如EditText上输入的数据或...原创 2019-08-06 16:44:23 · 723 阅读 · 0 评论 -
Android Jetpack之LiveData源码分析
Android Jectpack之ViewModel源码分析LiveData的使用会结合Lifecycles和ViewModel一起使用,不了解二者的,建议先看这两篇文章:Android Jectpack之ViewModel源码分析Android Jectpack之Lifecycles源码分析ViewModel 简介LiveData 是保存数据对象的类,通过注册监听器Observer 监...原创 2019-08-07 19:32:39 · 329 阅读 · 0 评论 -
Android jetpack的Paging和Room结合使用
介绍Paging主要是用来结合RecyclerView进行使用,是一种分页加载解决方案,这样Paging每次只会加载总数据的一部分。Room是Google提供的一个ORM库。本文的代码来自官方例子:官方示例地址使用Paging Room添加依赖 def room_version = "2.2.0-alpha02" implementation "androidx.r...原创 2019-08-24 19:32:19 · 1146 阅读 · 0 评论 -
Android Jetpack之Navigation源码分析
Android Jetpack之Navigation源码分析Android Navigation简介关于Fragment的基础篇:Fragment基础篇使用Navigation管理APP页面跳转,Navigation多数作用于Fragment中,导航组件还支持:Fragment、Activity、导航图和子图、自定义目标。使用Navigation切换Fragment可以使代码简洁,直观。N...原创 2019-08-15 18:03:21 · 931 阅读 · 0 评论 -
Android Jetpack之WorkManager源码分析
Android Jetpack之WorkManager源码分析Android WorkManager简介WorkManger是Android Jetpack提供执行后台任务管理的组件,它适用于需要保证系统即使应用程序退出也会运行的任务,WorkManager API可以轻松指定可延迟的异步任务以及何时运行它们,这些API允许您创建任务并将其交给WorkManager立即运行或在适当的时间运行。...原创 2019-08-22 19:28:38 · 1417 阅读 · 0 评论 -
Android jetpack总结
背景在Android开发中经常面临的问题:(1)在应用程序(Activity、Fragment)的生命周期管理困难,尤其是Fragment的跳转带来的生命周期管理问题。(2)在Activity需要重新创建的时候,界面控制器中存储的数据丢失,需要重新初始化,影响用户体验。(3)在非UI线程去获取数据(DB,NetWork)时,在界面控制器被销毁后,界面控制器需要结束和任务的订阅关系,避免内存...原创 2019-09-04 18:58:46 · 1891 阅读 · 0 评论 -
android6.0权限管理
android6.0的全新的权限管理机制简介不知不觉android已经出了android7.0的预览版了。但是android6.0的普及程度不高,比例没有超过2%. 但是Android6.0权限管理比较之前的版本有了很大的改进。android的权限系统一直是首要的安全概念,因为这些权限只在安装的时候被询问一次。一旦安装了,app可以在用户毫不知晓的情况下访问权限内的所有东西。但是原创 2016-10-10 19:26:57 · 404 阅读 · 0 评论 -
RecycleView隐藏部分Item
最近遇到一个业务需求,就是读取手机里面的所有的视频文件,并且根据文件所在的文件夹进行分类.效果图如下:打点击左侧的按钮实现展开和收起.具体的实现代码如下:public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ ... public void setVi原创 2016-10-10 19:18:21 · 17555 阅读 · 6 评论 -
Android 多渠道打包
Android 的Gradle多渠道打包配置AndroidMainfest.xml以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,代码大约如下:<meta-data android:name="UMENG_CHANNEL" android:value="xiaomi" />如果不使用多渠道打包方法,那就需要我们手动一个一个去修改value中的值,xiaomi,36原创 2016-06-22 17:58:55 · 7020 阅读 · 2 评论 -
ViewPager实现图片轮转
ViewPager实现图片轮转viewpager的生命周期:1:获取滑动的控件的个数。。。。getCount 2:当要缓存的图片可以进行的时候,会调用者方法进行图片的初始化,我们将要显示的View放入到ViewGroup中。然后作为返回值返回即可instantiateItem 3:PageAdapter只显示三张需要哦缓存的图片。如果滑动的图片超过了缓存的范围。就会调用者方法,将图片摧毁dest原创 2016-01-20 19:51:56 · 1321 阅读 · 0 评论 -
关于android的Notification的若干问题
毕业工作已经快半年了,打算在2016年开始总结自己平时在工作终于到的android方面的问题。今年遇到的第一个问题就是关于android的通知栏的问题。 在创建Notification的时候,总共有三种不同的方式。 (1)普遍的创建方式(通用)setLatestEventInfo(Context,”“,content,pendingIntent); (2)在API11以后的创建方式。Notif原创 2016-01-12 19:59:41 · 1588 阅读 · 0 评论 -
Android的日期选择器
DialogFragment实现日期选择器关于为什么使用DialogFragment而不是使用Dialog的实现,可以参考一下博客的关于DialogFragment的优点: http://blog.csdn.net/lmj623565791/article/details/42628537实现的效果图: 代码实现:public class ChooseTimeDialog extends原创 2016-03-02 23:10:19 · 4391 阅读 · 0 评论 -
RelativeLayout的addRule
RelativeLayout,顾名思义,就是以“相对”位置/对齐 为基础的布局方式。android.widget.RelativeLayout 有个 继承自android.view.ViewGroup.LayoutParams 的内嵌类 LayoutParams,使用这个类的实例调用 RelativeLayout.addView 就可以实现“相对布局”。 android.widget.Rela原创 2016-03-07 23:16:57 · 3774 阅读 · 0 评论 -
getRawX、getRawY和getX、getY的区别
区别最近在研究SwipeCard时,需要用到View的手势识别(GestureDetectorCompat),在GestureDetector的静态内部类SimpleOnGestureListener中有个onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY)。关于具体的参数的含义这里就不一一介绍。主要讲通过原创 2016-03-03 23:10:59 · 8660 阅读 · 0 评论 -
Android性能优化之一:ViewStub(转)
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及特定的方法。当ViewStub使用在布局文件中时,当程序inflate布局文件时,ViewStub本身也会被解析,且占据内存控件,但是与其他控件相比,主要区别体现在以转载 2016-03-20 17:35:53 · 370 阅读 · 0 评论 -
ViewPager实现Fragment懒加载
Fragment生命周期Fragment的生命周期可以参考文章: http://blog.csdn.net/lmj623565791/article/details/37970961ViewPager实现首页首页使用的是ViewPager和Fragment来实现,首页效果图: 但是Fragment的复杂的生命周期就会带来一个问题,比如我们刚打开APP,这个时候我们只想AFragment加原创 2016-03-22 20:58:50 · 1252 阅读 · 0 评论 -
Android M 的权限机制(转)
内容简介在Android M版本发布之前,Android系统中的权限模式一直采取较为简单粗暴的处理方式——即在安装之时由用户作出全部允许或者全不允许的二元选择。这意味着如果用户希望使用某款应用程序,则首先需要接受其中包含的全部权限要求或者干脆放弃安装。这就导致很多开发人员的编程成果在安装之时就被用户所弃用,根本无法真正实现用户与开发者间的信任关系乃至其它隐私保障手段。而在新的权限模式之下,用户将能够转载 2016-03-23 16:27:15 · 490 阅读 · 0 评论 -
Android的布局ViewStub
简介:ViewStub是一个不可见的,能在运行期间延迟加载的大小为0的View,它直接继承于View。当对一个ViewStub调用 inflate()方法或设置它可见时,系统会加载在ViewStub标签中引入的我们自己定义的View,然后填充在父布局当中。也就是说,在对 ViewStub调用inflate()方法或设置visible之前,它是不占用布局空间和系统资源的。它的使用场景可以是在我们需要加原创 2016-04-07 15:42:40 · 851 阅读 · 0 评论 -
android自定义验证码倒计时View
关于自定义View的构造方法里面的参数的含义可以参考: http://www.cnblogs.com/angeldevil/p/3479431.html代码:倒计时类:public class CountDownBtn extends Button implements View.OnClickListener{ private static final String TAG = C原创 2016-03-25 17:35:24 · 713 阅读 · 0 评论 -
android在Bubug模式下使用签名
我们在做百度地图定位的时候在debug模式下调试是无法显示出具体的定位信息的,其他的例如微博分享,微信分享也是,因为要使用对应的签名版本才能调用sdk成功。 那么我们只需要在AndroidStudio的Gradle中简单的配置一下就可以使用应用签名了1.在Gradle中引入如下代码://配置keystore签名signingConfigs { release { stor原创 2016-04-20 19:34:11 · 462 阅读 · 0 评论 -
Session 'app': Error Launching activity
更新Android studio2.0以后,运行程序会出现Session ‘app’: Error Launching activity错误。在控制台的输出日志是: 解决办法: 在setting里面找到instant run 然后将instant run设置为disabled .如图所示: 参考文档: http://stackoverflow.com/questions/3653原创 2016-05-17 11:38:31 · 15696 阅读 · 4 评论 -
BroadcastReceiver
前些天把四大组件之一的Service扯了一遍,今天就要开始谈谈它的弟兄BroadcastReceiver了。写到这里我挺纠结的,因为广播接收者确实比较简单,但是各位就不要以为简单的就不内涵,也许我们慢慢探讨一下还能有另外一片天地。 惯例还是先会介绍一下基础的知识,后面会说说关于BroadcastReceiver的接收顺序还有其他的一些小知识。BroadcastReceiver的概念转载 2016-04-24 17:35:24 · 351 阅读 · 0 评论 -
Android studio 修改工程的包名
最近为了修改Android的包名称废了半天得劲,特此记录下来。 错误的修改方式:以为可以直接通过右键Refactor然后raname就可以,发现并不可以。如图所示: 正确的做法: 然后在修改包名: 修改完成以后,注意修改一下Application Id 最后rebuild project即可。原创 2016-06-04 16:09:07 · 726 阅读 · 0 评论 -
Monkey、MonkeyRunner自动化测试文档
Monkey测试文档Monkey介绍:Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。Monkey的特征1、 测试的对象仅为应用程序包,有一定的局限性。 2、 Monky测试使用的事件流数据流原创 2016-06-05 16:56:16 · 6790 阅读 · 0 评论 -
Android N 第四个开发者预览版更新,即最终版 API 和 SDK 发布
昨天Google官方推出了Android N的第四个预览版,相比前三个预览版,SDK和API最终定型。新的版本全名叫作Android N Dev Preview 4。 今天Android N 第四个开发者预览版更新,即最终版 API 和 SDK 发布!开发者可以更新 SDK 并将应用的 compileSdkVersion 和 targetSdkVersion 设置为 24 进行开发测试。随着终版原创 2016-06-17 10:53:14 · 922 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-11-07 17:12:05 · 283 阅读 · 0 评论