学习
文章平均质量分 95
幕尘..
这个作者很懒,什么都没留下…
展开
-
Android Jetpack -- Room篇
Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。处理大量结构化数据的应用可极大地受益于在本地保留这些数据。最常见的用例是缓存相关数据。这样,当设备无法访问网络时,用户仍可在离线状态下浏览相应内容。设备重新连接到网络后,用户发起的所有内容更改都会同步到服务器。由于 Room 负责为您处理这些问题,因此我们强烈建议您使用 Room(而不是 SQLite)Room添加依赖如下: implementation "androidx.ro原创 2020-08-21 17:14:30 · 406 阅读 · 0 评论 -
Retrofit原理(五):设计模式和总结
Retrofit里面还充斥着大量的设计模式建造者模式首先肯定是建造者模式,这个太普遍了,几乎哪里都使用到了,就不做过多的说明工厂模式然后是工厂模式,采用的是抽象工厂模式,在它额Converter抽象类中可以很明显的看到public interface Converter<F, T> { @Nullable T convert(F value) throws IOExcep...原创 2019-08-24 15:45:13 · 230 阅读 · 0 评论 -
ConcurrentHashMap分析
很多次听到ConcurrentHashMap的一大堆优点,但是每次听到都是云里雾里,并不了解这些优点的本质,所以,要破解这些疑问还得要从实际入手,去观摩源码。以上是Map集合的各类比较,注意ConcurrentHashMap的key和Value都不能为null首先要知道ConcurrentHashMap是JDK5引入的线程安全的HashMap,但是再JDK7之前一直采用的是Segment分段...原创 2019-08-21 00:43:34 · 121 阅读 · 0 评论 -
动态规划
最优收入问题public static void main(String[] args) { int[][] nums = {{0, 0}, {1, 4}, {3, 5}, {0, 6}, {4, 7}, {3, 8}, {5, 9}, {6, 10}, {8, 11}};//表示时间段 int[] money = {0, 5, 1, 8, 4, 6, 3, 2,...原创 2019-09-03 14:01:34 · 421 阅读 · 2 评论 -
Android Framework学习(一)系统服务相关
Zygote启动我们知道Android的所有进程都是通过Zygote进程孵化而来的,那就有个疑问Zygote又是哪来的?所有,我们首先来了解一下Zygote进程是怎么启动的。首先Linux系统启动后会在用户空间创建第一个进程init进程,进程号固定为1。然后调用init中的main()方法执行init进程的职责。对于init进程的功能分为4部分:解析并运行所有的init.rc相关文件根...原创 2019-09-03 22:56:39 · 271 阅读 · 0 评论 -
java注解相关介绍与实例
注解:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。提供了一种原程序中的元素关联任何信息和任何数据的途径和方法注解介绍注解如同一种标签,表明对被注解的事物行为的某些角度的评价与解释。首先来了解一下Java自带的部分常用注解:@Overr...原创 2019-09-04 17:07:38 · 124 阅读 · 0 评论 -
约瑟夫环问题
偶然看到一个题目:N个人围成一圈(0~n-1),从第一个人开始报数,报到m(m-1)的人出圈,剩下的人继续从出圈的下一个人开始报数,报到m(m-1)的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号)第一眼看过去,大概感觉会是找规律的题目,直观方法首先想到的是,每次在出圈的人后面到末尾补上前面的人,比如N = 5, m = 31,2,3,4,5第一次3出圈,然后在5后...原创 2019-09-05 12:07:04 · 171 阅读 · 0 评论 -
汇总篇
java相关:基础Java8新特性String类详解及引伸来的equals,==,hashcode区别和StringBuilder和StringBuffer比较java多线程Java Object类Clone()方法java注解相关介绍与实例源码Collection.sort(TimSort)源码学习java hashMap源码学习ConcurrentHashMap分...原创 2019-09-05 12:36:54 · 136 阅读 · 0 评论 -
Android Framework学习(二)应用进程启动相关
Linux系统中进程的启动的创建分为创建和执行两个步骤,具体由fork()和exec()函数实现,首先fork()通过拷贝当前进程来创建一个子进程。然后exec()(该名字泛指系统调用,具体由execl,execv,execle和execve)函数负责读取可执行文件并将其载入进程的地址空间开始运行。不带exec只是单纯的执行fork(),子进程会直接共享父进程的资源。具体可参考Linux操作系统...原创 2019-09-05 17:23:07 · 216 阅读 · 1 评论 -
Android Jetpack架构组件
Jetpack时Google新推出的一种架构模式原创 2019-09-07 12:05:09 · 5811 阅读 · 4 评论 -
Android Jetpack -- ViewModel篇
ViewModel的出现主要为了解决两个问题:1.当Actvitiy销毁重建过程中的数据恢复问题,虽然原来可以使用onSaveInstanceState()来完成,但是只支持能被序列化的数据而且是小量数据,对于大量数据则显得有点无力。2.UI控制器的工作繁忙,UI控制器主要用于处理显示,交互,其他的额外操作可以委托给其他类完成,将不应该分配给UI的任务分离出来是必要的,这也就是上面所说的分离关...原创 2019-09-06 00:06:13 · 1963 阅读 · 0 评论 -
Android Jetpack -- LiveDate篇
LiveData是一个可观察的数据持有者类,不过它和其他的可观察对象不同,它会与生命周期相关联,比如Activity的生命周期,LiveData能确保仅在Activity处于活动状态下才会更新。也就是说当观察者处于活动状态,才会去通知数据更新。个人觉得这是为了避免内存泄漏,可以说是很实用了,因为要想避免内存泄漏,必须要感知到生命周期,而原本并没有提供额外的方法,像Glide采用了一个透明的Fra...原创 2019-09-06 13:28:58 · 844 阅读 · 0 评论 -
Android Jetpack -- DataBinding篇
DataBinding的存在是为了脱离Controller与View之间的引用联系。如下图所示这样,Controller只处理与业务逻辑相关的操作。我感觉DataBinding和Butterknife的思想很类似,估计Google参考了各种优秀的框架任何自己统一推出了集各家精华的架构方案。DataBinding使用首先再build.gradle中开启dadabindingdataBin...原创 2019-09-06 14:21:47 · 956 阅读 · 0 评论 -
Android Framework学习(三)Activity相关
Activity如何启动Activity的跨应用的启动其本质还是启动另一个进程,所以和启动进程的流程一样的,都是涉及到与AMS,Zygote间的IPC来完成。下面简单概述一下,当当前Activity调用startActivity()时,会调用AMS提供给每个Activitiy的Binder来进行远程调用到AMS的startActivity()方法。这里就略过进程启动的部分细节,先提供示意图来...原创 2019-09-14 15:20:39 · 214 阅读 · 0 评论 -
Android Jetpack -- Navigation篇
Navigation是指允许用户在应用程序中浏览、进入和退出不同内容的Fragment。Navigation能够实现从简单的按钮单击到更复杂的模式,如应用程序栏和导航抽屉。导航组件还通过遵循一套既定的原则来确保一致和可预测的用户体验。来看下Navigation的原则吧:固定的起始位置:也就是说除去登陆等一次性界面,用户在启动App最先看到的界面需要为一个固定的起始界面。Navigation...原创 2019-09-14 20:23:04 · 907 阅读 · 0 评论 -
Android Jetpack -- Lifecycles篇
基本概念Lifecycles其实从名字看肯定是与生命周期相关,那它与生命周期又有什么联系?先参考一下官方文档:Lifecycles是一个生命周期感知组件,当Activity或者Fragment的生命周期发生改变的时会,Lifecycles也会做出相应的生命周期状态的改变,它保存关于组件生命周期状态的信息(比如活动或片段),并允许其他对象观察这种状态。可以看出Lifecycles是一个组件,...原创 2019-09-14 21:31:01 · 598 阅读 · 0 评论 -
Android 自定义View(画线循迹,雷达图+动画实现)
自定义首先接触到的时候觉得很有兴趣,便学习了一下HenCode自定义View教程,每个章节部分还会有配套的联系项目,难以理解的地方还有视频介绍,很用心的教程了HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解HenCoder Android 开发进阶:自定义 View...原创 2019-09-19 14:52:42 · 714 阅读 · 0 评论 -
Retrofit原理(四):返回值的参数是怎么获取到的?
T原创 2019-08-24 13:49:47 · 617 阅读 · 0 评论 -
Retrofit原理(三):Response响应处理
继续回到我们的create()方法public <T> T create(final Class<T> service) { Utils.validateServiceInterface(service); if (validateEagerly) { eagerlyValidateMethods(service); } ret...原创 2019-08-23 23:44:07 · 1815 阅读 · 0 评论 -
Android学习笔记(三)----ImageView,ListView,GridView,ScrollView & HorizontalScrollView
继续…(二)ImageView1.常用属性 scaleTypefitXY:填满控件,宽高比可能会发生改变fitCenter:保持宽高比缩放,直至能够完全显示centerCrop:保持宽高比缩放,直至能够完全填满控件,会发生裁剪...原创 2018-11-19 22:03:09 · 170 阅读 · 0 评论 -
Android学习笔记(二)----Button,EditText,RadioButton,ChecxBox
第二天了,继续(一)Button主要学习以下操作1.文字大小类似text的设置2.自定义背景形状(1)圆角边框效果如下:需要设置背景为drawable里的xml文件android:background=&amp;amp;amp;amp;quot;@drawable/bg_btn2&amp;amp;amp;amp;quot;此处bg_btn2为shape文件shape文件代码如下&amp;amp;amp;amp;amp;lt;?xml原创 2018-11-17 18:06:51 · 264 阅读 · 0 评论 -
Android学习笔记(四)-----RecyclerView,WebView
(2-11)RecyclerView其官方定义是:A flexible view for providing a limited window into a large data set能够灵活的实现大数据集的展示,视图的复用管理比ListView更好,能够显示列表,网格,瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能1.LinearRecyclerView...原创 2018-11-28 18:54:51 · 973 阅读 · 0 评论 -
Android学习笔记(五)-----Toast,AlartDialog,ProgressBar&ProgressDialog,自定义Dialog,PopMenu
第三节 UI组件之弹出组件3-1 消息提示 1.设置显示的位置代码如下:Toast toastCenter = Toast.makeText(getApplicationContext(),"居中Toast",Toast.LENGTH_SHORT);toastCenter.setGravity(Gravity.CENTER, 0, 0);//后两个参数为x偏移量,y偏移量...原创 2018-12-01 21:40:28 · 584 阅读 · 0 评论 -
Android学习笔记(六)-----Activity与Fragment
4-1-1 Activity的创建新建类继承Activity或其子类 在AndroidManifest中声明 创建layout并在Activity的onCreate中设置在AndroidManifest.xml里可设置android:theme:设置主题样式android:screenOrientation:用于控制activity启动时方向,一般设置竖屏或横屏显...原创 2018-12-06 21:29:18 · 325 阅读 · 0 评论 -
String类详解及引伸来的equals,==,hashcode区别和StringBuilder和StringBuffer比较
1.StringBuilder和StringBuffer比较1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String2.String <(StringBuffer,StringBuilder)的原因String:字符串常量StringBuffer:字符串变量StringBuilder:字符串变量Strin...原创 2019-04-16 22:42:17 · 494 阅读 · 0 评论 -
Java8新特性
Java8——Lambda表达式语法Lambda表达式的重要特征:变量作用域java8的新特性之一,Lambda 表达式,也可称为闭包。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。但是实质上是类似于“语法糖”,将你包装好的代码有编译器来完成转换,从而使代码更加的简洁,不太推荐经常使用,因为它尽管很简洁,但是难懂,...原创 2019-04-14 16:35:41 · 221 阅读 · 0 评论 -
java多线程
java多线程还是很重要的,进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。线程:进程中负责程序执行的执行单元,线程本身依靠程序进行运行,是程序中的顺序控制流,只能使用分配给程序的资源和环境线程的生命周期新建状态:使用 new 关键字和 Thread 类或其子类建...原创 2019-04-19 15:47:54 · 84 阅读 · 0 评论 -
Collection.sort(TimSort)源码学习
Collections 工具类Collections 工具类中有自带的sort()排序方法,比较好奇是怎么实现的,然后查看源码,是用到了Array类中的sort方法 public static <T> void sort(T[] a, Comparator<? super T> c) { if (c == null) { s...原创 2019-04-25 15:47:46 · 589 阅读 · 0 评论 -
Android特有的数据结构SparseArray,ArrayMap
Android特有的数据结构有ArrayMapArraySetSparseArray首先来看SparseArray,该类的官方说明:(自己更改了些)SparseArray是类型的Map,比HashMap<Integers, Object>的内存效率更高,因为避免了对int的封装,并且不依赖于Entry结构。SparseArray比HashMap更省内存,它对数据采取了...原创 2019-05-06 11:24:49 · 831 阅读 · 2 评论 -
java hashMap源码学习
首先来简单了解下HashMap,众所周知其是个散列表,存储<key, value>结构extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable,而且它不是线程安全的有关Map的继承关系如下图,借用[3]其静态成员变量 //默认的初始容量16,必须是2的倍数 stat...原创 2019-06-28 16:23:17 · 99 阅读 · 0 评论 -
Java Object类Clone()方法
偶然看到clone()方法,发现我对这个方法如此陌生,还是Object里的方法,不去了解怎么行了解的最好办法就是直接去看源码了,发现是个native方法,去看注释/** * Creates and returns a copy of this object. The precise meaning * of "copy" may depend on the class o...原创 2019-07-24 23:06:05 · 195 阅读 · 0 评论 -
AsyncTask 串行SERIAL_EXECUTOR,并行THREAD_POOL_EXECUTOR分析
AsyncTaks的内部实现机制相信已经很多人了解过了,但是多次调用excute()后,它是怎么执行的?带着这个疑问,来实践下看看public class TestActivity extends AppCompatActivity { private static int ID = 0; private static final int TASK_COUNT = 20; ...原创 2019-08-05 22:20:00 · 753 阅读 · 0 评论 -
AbsListView源码RecyclerBin解析
都知道ListView有复用View的机制,但是具体是怎么复用的却不怎么明白,里面的机制一概不知,百度了下也是云里雾里,果然纸上得来终觉浅,绝知此事要躬行,还是要自己深入源码去学习RecycleBin的重要成员变量 private RecyclerListener mRecyclerListener; //存储在mActiveViews中的第一个视图的位置。 private...原创 2019-08-01 19:51:27 · 311 阅读 · 0 评论 -
Okhttp3 源码流程梳理
首先OkHttp的应该都知道以下为异步请求OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("") .build(); Call call = client.newCall(...原创 2019-08-18 20:53:58 · 177 阅读 · 0 评论 -
Retrofit原理(二):Request请求处理
还是回到上文的create方法处IRetrofitTest iRetrofitTest = retrofit.create(IRetrofitTest.class);再进入create方法到return loadServiceMethod(method).invoke(args != null ? args : emptyArgs);ServiceMethod<?> loa...原创 2019-08-23 16:39:23 · 261 阅读 · 0 评论 -
Android学习笔记(一)----LinearLayout,RelativeLayout,TextView
Android学习今天是第一天,想好好的学习Android的开发主要了解线性布局(LinearLayout)和相对布局(RelativeLayout)首先是线性布局LinearLayout:android:layout_margin:外边距,当前组件距离其父组件上的边距,指的就是与外部界面的边距android:layout_padding:内边距,是相对于当前组件而言的,就是指组件内的...原创 2018-11-15 23:13:47 · 296 阅读 · 0 评论