学习笔记
文章平均质量分 54
敲响指间的艺术
代码写到极致就是艺术
展开
-
图解apk的打包过程
编译打包步骤:1. 打包资源文件,生成R.java文件打包资源的工具是aapt(The Android Asset Packaing Tool)(E:\Documents\Android\sdk\build-tools\25.0.0\aapt.exe)。在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制。存放在APP的res目录下的资源,该类资源在APP打包前转载 2021-06-03 17:39:17 · 665 阅读 · 0 评论 -
CoordinatorLayout + AppBarLayout + RecyclerView实现典型可收缩ToolBar示例
<com.gh.zqzs.common.widget.swipeRefresh.SwipeRefreshLayout android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behav..原创 2021-01-11 16:57:19 · 438 阅读 · 1 评论 -
分析Kotlin协程实现原理
简单来说 Kotlin协程 一种异步编程的同步顺序写法,它跟线程是两个不同的概念,所以不要被 协程 两字弄混淆来看一下一个具体的场景:我们进行网络请求得到数据后处理数据,代码如下 fun setUpUI(){ val data = requestData() doSomethingElse() processData(data) } fun requestData(): String { Thread.sl.转载 2020-12-30 11:43:27 · 1736 阅读 · 0 评论 -
View的测量过程
本文主要讲解Android View绘制三大流程(measure,layout,draw)中的measure流程前言:为什么需要measure过程?我们在在绘制UI的时候,基本都是通过XML布局文件的方式来配置UI,而每个View必须要设置的两个群属性就是layout_width和layout_height,这两个属性代表着当前View的尺寸。所以这两个属性的值是必须要指定的,这两个属性的取值只能为三种类型:1、固定的大小,比如100dp2、刚好包裹其中的内容,wrap_con原创 2020-12-25 15:40:01 · 231 阅读 · 0 评论 -
Android-Gradle
1.Gradle介绍:1.1Gradle是什么?简单来说Gradle就是一个项目构建工具1.2Gradle 有什么用?它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑1.3Gradle是用什么语言编写的呢:Groovy基于Java并拓展了Java。 Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Javaclass然后启动虚拟机原创 2020-12-25 11:34:18 · 93 阅读 · 0 评论 -
Android-Databinding
Android-Databinding简介Databinding 是一个实现数据和UI绑定的框架1.引入Android 2.1以上(API级别7+)Android 的 Gradle 插件版本不低于 1.5.0-alpha1android { .... dataBinding { enabled = true }}2.为什么要使用Data Binding?首先我们看一下传统的写法 一般情况下都是写一堆layout, 你通过f...原创 2020-12-25 10:50:55 · 246 阅读 · 0 评论 -
Java Lock和Synchronized区别
一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。 Lock 接口支持那些语义不同(重入、公平等)的锁规则,可以在非阻塞式结构的上下文(包括 hand-over-hand 和锁重排算法)中使用这些规则。主要的实现是原创 2020-12-05 22:59:08 · 2409 阅读 · 0 评论 -
图解八大排序算法——最详细的讲解
1.选择排序1.1 动图演示1.2 思路分析1.第一个跟后面的所有数相比,如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或最大的数)2.下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大)的数重复以上步骤直到指针移到倒数第二位,确定倒数第二小(或倒数第二大)的数,那么最后一位也就确定了,排序完成。1.3 负杂度分析1.不管原始数组是否有序,...原创 2020-12-04 15:43:40 · 4677 阅读 · 1 评论 -
MVC、MVP、MVVM三种架构模式的区别
一、MVC(Model-View-Controller)MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。二、MVP(Model-View-Presenter)MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之转载 2020-12-02 16:51:36 · 416 阅读 · 0 评论 -
android 实现无限循环轮播
一丶不多说废话,直接看图效果二丶核心就是一个recyclerview,其本身就有一个 smoothScrollToPosition()滑动到指定的位置,但是这个过程很快,不是我们想要的效果, 这个方法里面最终调用的是LinearLayoutManager的smoothScrollToPosition()方法,所以我们需要重写LinearLayoutManager的smoothScrollToPosition()方法来控制滑动速度,接下来上代码:import android.content.Co原创 2020-07-03 19:06:28 · 1067 阅读 · 0 评论 -
Android Fragment在ViewPager中的延迟加载
当我们的app首页需要ViewPager + Fragment , 甚至Fragment中还继续嵌套ViewPager + Fragment 这样的嵌套层级时,每次首次打开App所有的Fragment都会初始化并且去网络请求数据,这就会造成每次打开时加载很慢体验极差,而且用户又不一定每一个页面都会点击去查看,用数据流量的话还会造成流量的浪费,这时我们就需要用到Fragment的延迟加载机制了,这样...原创 2020-01-10 17:37:32 · 457 阅读 · 0 评论 -
Android自定义可跟随手指拖动的全局悬浮窗
一丶首先是自定义一个跟随手指滑动的View,目前只支持简单的悬浮拖动,可在此基础上进行功能扩展,比如直播类APP的悬浮播放窗也是这个原理,挺简单的,不多说了,直接上代码,import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.B...原创 2019-12-28 23:04:02 · 1739 阅读 · 0 评论 -
Android 开启一个透明的Activity
一丶首先获取Activity的Window对象,将Activity所属的Window设置为一个像素大小// 设置透明沉浸状态栏if (Build.VERSION.SDK_INT>=21) { View decorView = getWindow().getDecorView(); decorView.setSystemU...原创 2019-06-18 16:47:13 · 4372 阅读 · 0 评论 -
Git合并多次提交记录
一、首先在终端输入查看git log命令查看提交的历史记录,默认只显示两条提交纪录,可按回车键显示多条纪录.二、然后复制合并前的一次提交记录的前9位hash值2565ds565,在终端输入:git rebase -i 2565ds565 进行合并三、然后就会进入历史提交的编辑页面pick acf6d24 第二次提交pick 0353373 第三次提交# Rebase 2169...转载 2019-06-10 19:10:35 · 5942 阅读 · 0 评论 -
RXjava2总结
1、RxJava 基本1.1 RxJava 简介RxJava是一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库。虽然,在Android中,我们可以使用AsyncTask来完成异步任务操作,但是当任务的梳理比较多的时候,我们要为每个任务定义一个AsyncTask就变得非常繁琐。RxJava能帮助我们在实现异步执行的前提下保持代码的清晰。它的原理就是创建一个Obs...原创 2019-06-15 12:54:41 · 600 阅读 · 0 评论 -
Android 5.0以上系统设置沉浸式状态栏
首先App的theme得是NoActionBar,然后在Activity 的onCreate方法中的setContentView方法前加上以下代码:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags( WindowManage...原创 2019-06-19 17:11:34 · 802 阅读 · 0 评论 -
RxJava+Retrofit网络请求框架封装实现MVVM模式
RxJava的作用主要就是负责线程调度,所以就可以把Retrofit封装为一个工具类;主要代码如下:import android.support.annotation.NonNull;import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import java.util.concurrent...原创 2019-06-02 18:45:48 · 735 阅读 · 0 评论 -
Android AIDL跨进程通信步骤
一. 首先在服务端创建一个和java文件夹同级的aidl文件夹,然后在aidl文件夹里面新建AIDL接口,在接口里面定义我们要暴露给客户端调用的方法,AIDL接口中的数据类型只能是八大基本数据类型丶String和CharSequence丶List和Map(里面的元素都必须能够被AIDL支持)丶实现了Parcelable接口的对象以及AIDL接口本身.AIDL接口的示例代码如下:// IMyA...原创 2019-06-02 11:21:00 · 134 阅读 · 0 评论