自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 Jetpack之DataBinding使用方式

一.基础入门DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM 相对于 MVP,其实就是将 Presenter 层替换成了 ViewModel 层。DataBinding 能够省去我们一直以来的 findViewById() 步骤,大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常启用

2020-08-10 14:42:28 680 1

原创 Android屏幕适配方案

目前比较流行的屏幕适配方案是今日头条适配方案和smallest width限定符适配方案首先来说一下今日头条的屏幕适配方案:简介:我们写UI界面的时候,都是使用dp作为单位,UI给出的设计图也是以dp为单位,比如UI给的图是宽x高为360x640dp的。那么我们为了达到在所有手机上都能不变形的展示UI图,那么我们所有的手机都要是宽x高 = 360 x 640dp,很显然,实际情况不是这样的,因...

2020-04-17 20:52:27 359

原创 Android studio 环境问题

1 'gradlew' 不是内部或外部命令,也不是可运行的程序 或批处理文件。发现一个项目的graldew命令不能用,而其他的gradlew命令是可以用的,经过对比发现,这个新的项目的目录里面没有gradlew.bat文件2FAILURE: Build failed with an exception.* What went wrong:Could not determine...

2019-08-14 15:16:23 413

原创 git拉取代码碰到的问题

使用git拉取代码的时候报这种错误 Unable to negotiate with 59.110.70.248 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 fatal: Could not...

2019-08-13 19:47:02 1329

原创 剑指offer 算法题 :二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5 /** public class TreeNode { int val = 0; TreeNode left = null; Tree...

2019-06-21 16:45:08 106

原创 剑指offer算法题----顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.import java.util.ArrayList;public class Solution { pub...

2019-06-21 16:00:59 95

原创 剑指offer算法题----定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 import java.util.Stack; public class Solution { private Stack<Integer> stack = new Stack(); private Stack<Integer> minStac...

2019-06-20 21:12:39 156

原创 算法题:输入一个链表,反转链表后,输出新链表的表头

public ListNode reverseListNode(ListNode head) {if (head == null) {return null;}ListNode next = null;ListNode pre = null;while (head != null) {next = head.next;head.next = pre;pre = head;hea...

2019-05-28 21:16:04 768

原创 算法题:只遍历一次,寻找链表中倒数第K个节点(单向链表)

为了能够遍历一次就能找到倒数第K个节点,可以定义两个指针1.第一个指针从链表头指针开始遍历,向前走k-1步,第二个指针不动。2.从第k步开始,第二个指针也开始从链表头指针开始遍历由于两个指针的距离保持K-1,当第一个指针到达链表的尾节点时,第二个指针指向的正好是倒数第k个节点 public static Node FindKthToTail(Node head,int k) { ...

2019-05-26 14:55:33 1587 1

原创 排序算法学习

/*** 快速排序时间复杂度为n*lgn* 不稳定排序算法*/public static void quickSort(int[] a,int l,int r) { if (l < r) { int i,j,x; i = l; j = r; x= a[i]; while (i < j) {...

2019-05-23 14:31:34 91

原创 一个工具脚本(把apk包拷贝解压缩复制到机器中去)

#!/usr/bin/env bashmv mor-service-app/build/outputs/apk/debug/mor-service-app-debug.apk mor-service-app.apkunzip -o mor-service-app.apk -d ~/mortmpadb rootadb remountadb push mor-service-app.apk ...

2019-05-14 10:54:29 258

原创 HashMap源码分析

简介HashMap是基于哈希表实现的Map接口,它提供了所有可选的map操作,并且允许value和key为null。HashMap和Hashtable大致类似,它是非线程安全的并且可以存储null键和null值。它不能保证元素的顺序。HashMap提供了常数时间的get和put操作。HashMap底层是通过数组、链表和红黑树实现的。它有个内部类Node,主要用来存放key和value。然...

2019-05-07 17:57:09 85

原创 ExoPlayer的使用与解析(官方文档翻译)

简介ExoPlayer是一个Android应用层的媒体播放器,它提供了一套可替换Android MediaPlayer的API,可以播放本地或者是线上的音视频资源。ExoPlayer支持一些Android MediaPlayer不支持的特性,比如适配DASH和SmoothStreaming 的播放。和MediaPlayer不同的是,ExoPlayer很容易自定义和扩展,并且它可以通过应用商店...

2019-04-28 22:54:13 5322

原创 Paint和Canvas学习

先上图看效果圆角矩形的实现方法在自定义View初始化的地方创建画笔,并设置相关属性 //创建画笔,设置flag //ANTI_ALIAS_FLAG 抗锯齿 //DITHER_FLAG 在绘制的时候启用抖动标志 paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); //给画笔设置颜色 paint.set...

2019-04-20 20:37:38 202

原创 剑指Offer题目----二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示public class Solution { public int NumberOf1(int n) { int count = 0; while(n!= 0){ count++; n = n & (n - 1); ...

2019-04-16 11:02:10 125

原创 Java内存区域与垃圾收集机制(读书笔记)

Java内存区域根据Java虚拟机规范的规定,Java虚拟机运行时数据区域包括程序计时器,java虚拟机栈,本地方法栈,java堆,方法区等五部分。程序计数器:程序计数器是一块较小的内存空间,它可以看做是当前线程所执行字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。由于java虚拟机的多线程是通过线程轮流切换...

2019-04-14 19:38:41 159

原创 开源一个Flutter项目

这是一个学习Flutter的项目主要模块包括电影、新闻、技术、我的四个模块网络请求使用的是第三方库dio、json解析使用的是build_runner: ^1.0.0和json_serializable: ^2.0.0接口使用了豆瓣、知乎和玩Android的开放接口闪屏页新闻模块新闻模块包括一个横向的ListView和竖向的ListView,分别展示热门新闻和最近新闻。点击List...

2019-04-13 18:41:24 404

原创 Dart基本知识-变量以及常量

var 是一种不指定类型声明变量的方式 var str = "test"; var a = 1; var b = false;var是一个关键字,并不是一个类型,这种不指明类型的变量的类型为dynamic。$variableName 或者 ${expression}字符串插值:在字符串字面量中引用变量或者表达式。 var host = "http://v.juhe.cn/"...

2019-04-10 21:45:27 856 1

原创 Volatile关键字解析

Volatile关键字有什么作用?Volatile关键字可以保证变量的可见性和有序性什么是可见性和有序性?要搞清楚什么是可见性必须要搞清楚java的内存模型java的内存模型是:所有的变量都存放在主存之中,然后每个线程都有一个自己单独的内存,叫工作内存,线程自己的的工作内存对自己来说是私有的,主存是所有线程都可以共享的内存。当线程要操作某个变量的时候,线程会从主存中拷贝一份这个变量...

2019-04-03 15:38:27 123

原创 Flutter实现Tab切换页面

先看效果图实现过程分析首先自定义一个TabBarWidget class TabBarWidget extends StatefulWidget{ //底部模式 static const int BOTTOM_TAB = 1; //顶部模式 static const int TOP_TAB = 2; final int type; //标题...

2019-04-01 23:04:59 12935 2

原创 Java类的加载机制(读书笔记)

java类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备和解析统称为连接。java虚拟机并没有强制约束在什么情况下需要开始类加载过程的第一个阶段(加载),但是严格规定了有且仅有5种情况必须立即对类进行初始化遇到new、getstatic、putstatic或invokestatic这4条...

2019-03-30 22:53:38 123

原创 Retrofit请求更换baseUrl以及源码分析

一般一个应用都只创建一个Retrofit实例,但是当碰到需要的网络请求的baseUrl不止一个的时候,就要考虑如何给retrofit对象根据不同的请求接口更换不同的baseUrl了。实现方法//创建retrofit对象private void initRetrofit(final Context context) { // 设置超时 builder.retryOn...

2019-03-28 17:26:37 662

原创 RecyclerView实现聊天界面

先看一下效果图RecyclerView简介RecyclerView是从Android5.0开始,谷歌公司推出的一个用于大量数据展示的新控件。RecyclerView可以替代传统的ListView,它更加强大和灵活,RecyclerView的官方定义如下 A flexible view for providing a limited window into a large data ...

2019-03-27 21:37:53 2963

原创 Flutter实现网络请求

Flutter网络请求使用的是Dio。Dio是一个强大易用的dart http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载…Flutter json数据解析是使用了json_serializable package包。它是一个自动化源代码生成器,可以为我们生成JSON序列化模板。由于序列化代码不再由我们手写和维护,我们将运行时产...

2019-03-27 00:38:53 12961 1

原创 Flutter实现ListView效果

在Flutter中,Android ListView就是Flutter中的ListView在Android ListView中,您可以创建一个适配器,然后您可以将它传递给ListView,该适配器将使用适配器内返回的内容来展示每一行。然而,你必须确保在合适的时机回收行,否则,你会得到各种疯狂的视觉和内存问题。在Flutter中,由于Flutter的不可变的widget模型,将一个Widge...

2019-03-23 22:59:05 3913

原创 Flutter学习之--------环境配置(Windows10环境)

Flutter简介Flutter是谷歌的移动UI框架,可以快速在IOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正被越来越多的开发者和组织者使用,并且Flutter是完全免费、开源的。使用镜像由于国内使用Flutter时有可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,可以将如下环境变量加入到用户环境变量...

2019-03-22 21:40:32 601

原创 算法题:按之字形打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推import java.util.ArrayList;import java.util.Stack;/*public class TreeNode {int val = 0;TreeNode left = null;TreeNode right...

2019-03-16 21:15:56 178

原创 算法题:把二叉树打印成多行

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。public class Solution {ArrayList&amp;lt;ArrayList &amp;gt; Print(TreeNode pRoot) {ArrayList&amp;lt;ArrayList&amp;gt; list = new ArrayList();if(pRoot == null) return list;ArrayList...

2019-03-16 19:57:01 164

原创 Activity的启动过程(笔记)

在启动Activity的时候,我们会调用Context的startActivity方法,这个方法会调用到Activity的startActivityForResult方法。startActivityForResult方法又会调用到Instrumentation类的execStartActivity方法,这个方法又会调用到ActivityManagerNative对象的startActivity这个...

2019-03-16 16:52:27 284

原创 Android 自定义轮播图(Banner)

先上图看效果:知识要点:轮播图是怎么做到无限循环的呢让ViewPagerAdapter里面的getCount返回MAX_VALUE,instantiateItem方法中,获取图片的时候,让position % drawableList.size(),来得到真实值 @Override public int getCount() { return Integer.MAX_VA...

2019-03-11 17:04:45 915

原创 Fragment生命周期,以及hide() show() replace() add() remove() addToBackStack(null)等对Fragment生命周期的影响

Fragment的生命周期Fragment的生命周期如图所示,注意点:在onAttach()方法回调的时候,说明Fragment已经附着到了Activity上,在onAttach方法中获取它所在的Activity对象并且保存为全局属性,以便后面的方法中使用,切记不要使用getActivity来获取它所在的activity对象,因为这个方法有的时候会返回为空,因为在某些情况下,Activity...

2019-03-10 20:05:35 1432

原创 Retrofit源码解密之----------动态代理

写在前面的话Retrofit是开源的网络请求框架,是目前最火的框架之一,也是求职面试之中被提问的比较多的知识点。最近抽了点时间阅读了一下Retrofit源代码,给大家分享一下 public &amp;lt;T&amp;gt; T create(final Class&amp;lt;T&amp;gt; service) { //判断service是不是个接口 Utils.validateServiceInter...

2019-03-08 22:21:25 172

原创 《Android开发艺术与探索》读书笔记之Binder

1.Binder是Android中夸进程通信的一种方式。从Android FrameWork 角度来说,Binder是ServiceManager连接各种Manager(ActivityManager和WindowManager等)和相应ManagerService的桥梁。从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回包含了一个...

2019-03-02 20:38:46 158

原创 容易导致内存泄露的场景

资源性对象未关闭资源性对象(比如Cursor、File文件等)往往都用了一些缓冲,在不使用的时候,应该及时关闭它们,以便它们的缓存数据能够及时回收。它们的缓存不仅仅在JAVA虚拟机内,还存在JAVA虚拟机外,如果仅仅把它们的引用对象置为null,而不关闭它们,往往会造成内存泄露。因为有些资源性对象,比如SQLite Cursor,如果我们没有关闭它,而仅仅把它置为null,系统在回收它时也会...

2019-02-26 14:13:11 341

原创 Android事件分发机制

Android 事件分发涉及到三个方法 public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发事件的,返回结果受当前View的onTouchEvent(MotionEvent ev)和下级View的dispatchTouchEvent(MotionEvent ev)影响 public boolean onIntercept...

2019-02-24 22:41:09 118

原创 Android MVP 模式框架

Android 开发MVP模式已经成为了主流开发框架,它相对于MVC模式确实有很多好处,比如:1.减少了Activity或者Fragment里面的代码数量,使Activity代码或者Fragment代码看起来不再那么臃肿,逻辑复杂。2.使逻辑处理和UI操作进行了解耦,有利于进行维护,迭代和重构3.使代码结构更加清晰,更加容易阅读下面就看一下MVP模式是怎么实现的 (UI层以Fragmen...

2019-02-23 12:00:42 384

原创 如何把本地文件上传到码云(同github)

1.在码云上创建一个仓库2. 复制一下仓库的地址3.进入到要上传的本地文件的目录下4.在当前目录下打开git命令窗(前提必须安装了git工具)5.执行git命令 git init git add . git commit -m &quot;inital&quot; git remote add origin https://gitee.com/ABC_MA_NONG/Utils.git (这...

2019-02-20 19:51:11 2670 1

原创 什么是过度绘制,如何防止过度绘制

过度绘制是指,屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结 构里,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次,同时 会浪费CPU和GPU资源。在Android手机设置的开发者选项里面,打开调试GPU过度绘制的开关,就可以看到过度绘制的信息原色 没有过度绘制蓝色 过度绘制一次绿色 过度...

2019-02-18 20:52:08 2910

原创 Android抽屉集成示例

集成步骤:1.新建一个Android studio工程:2.添加依赖compile 'com.ikimuhendis:ldrawer:0.1'3.编写activity_main.xml文件&lt;android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:android="...

2019-02-18 09:53:40 147

原创 Android优化方案

1.启动时间优化Android 启动耗时主要发生在Application的onCreate()方法和主Activity的onCreate()方法中,主线程如果不能尽快的执行渲染UI的操作,就会给人一种启动慢的感觉。产生这种现象的原因主要是启动时,Application的onCreate()方法中和主Activity的onCreate()方法中有一些操作占用了主线程的资源,导致主线程花去了时间去执...

2019-02-16 22:06:57 130

retrofit学习

学习retrofit的PPt,共享给大家

2016-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除