自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Handler

例如,如果您正在后台线程中执行长时间运行的操作,并希望更新UI上的进度条,则可以使用处理程序将消息或可运行文件发布到UI线程以更新进度条。通过这些类的协作,Handler 可以方便地在主线程之外的线程中执行任务,比如在子线程中更新 UI 界面,或者在后台线程中执行一些耗时的操作等。:负责处理消息队列中的消息,每个线程只有一个 Looper,当 Handler 发送消息时,会将消息投递到 Looper 所在的消息队列中。:主要用于处理消息队列中的消息,可以将消息投递到消息队列中,并在主线程中处理消息。

2023-03-08 20:26:27 165

原创 Android 的发展前景

Android 的发展前景

2023-03-06 18:47:00 1609

原创 Android app 包体积深度优化 3000字总结

Android app 包体积深度优化总结

2023-03-06 18:42:18 304

原创 关于android app架构的一点思考

android app 架构 思考

2022-11-24 00:07:51 1171

原创 一些个人思考

产品设计 过度设计 思考 产品设计的改进

2022-11-23 22:46:54 84

原创 Linux下vim的使用

Linux下vim的使用vim 命令模式下vim 常用快捷键命令模式下的跳转和删除命令模式下的复制粘贴命令模式下的查找命令模式下的分屏 vim 文件 // 打开文件 vim 命令模式下vim 常用快捷键 u //撤销 恢复 i //输入 ,光标不动 I //输入,光标前面 a //输入 ,光标退后一个 A //输入 ,光标到行末尾 s //输入 ,光标删除所在字符 S //输入 ,光标删除所在整行命令模式下的跳转和删除 u //撤销 恢复

2021-12-21 15:06:12 351

原创 Mac 环境变量配置

Mac 环境变量配置1. cd 回到默认目录下2. open .bash_profile3. 例 jdk 环境配置: export ANDROID_HOME=/Users/lizhi/Library/Android/sdk export PATH=${PATH}:${ANDROID_HOME}/tools export PATH=${PATH}:${ANDROID_HOME}/platform-tools4. 保存并退出5. source profile //【修改的生效】

2021-12-21 13:02:06 1541

原创 Mac 登陆服务器

Mac怎么登陆:用自带的终端,输入 ssh 账户名@根据公网的ip

2021-12-21 13:00:27 630

原创 Linux 基本命令大全

Linux基本命令

2021-12-21 12:00:57 214

原创 Android 高级UI3 RecyclerView使用ItemTouchHelper实现拖拽和侧滑删除并解析源码

实现拖拽和侧滑之前我门需要先了解一个recyclerview的辅助类ItemTouchHelperItemTouchHelper是一个工具类,可实现侧滑删除和拖拽移动,使用这个工具类需要RecyclerView和Callback。同时根据需要重写onMove和onSwiped方法。接下来就来讲述ItemTouchHelper的使用方法。ItemTouchHelper 常用的函数列出如下: /** * 针对swipe和drag状态,设置不同状态(swipe、drag)下支持的方向

2020-07-31 14:42:20 841

转载 Android 高级UI2 利用代理模式为RecyclerView添加head和footer

1.ListView添加HeaderView和FooterView源码分析ListView关于HeaderView和FooterView的源码 public void addHeaderView(View v) { addHeaderView(v, null, true); } public void addHeaderView(View v, Object data, boolean isSelectable) { final FixedViewInf

2020-07-31 14:05:00 186

原创 Android 高级UI1 Material Design

1.Material Design概述Material Design,中文名:材料设计语言,是由Google推出的全新的设计语言,谷歌表示,这种设计语言旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。简介Material Design语言 的一些重要功能包括 系统字体Roboto的升级版本 ,同时颜色更鲜艳,动画效果更突出。杜拉特还简要谈到了新框架的一些变化——这个新框架也于今天在 google.com/design 公开发布。谷歌的想法是让谷歌平台上的开发者掌握这个新框

2020-07-30 17:48:34 437

原创 Kotlin-mvp-Rxjava-dagger2-Retrofit-EasyPermission+Okhttp 项目框架

Kotlin-mvp-Rxjava-dagger2-Retrofit-EasyPermissionKotlin 版 快速搭建 Kotlin + MVP + RxJava + Retrofit + EasyPermission 的框架,方便快速开发新项目、减少开发成本前言前段时间学习了 Kotlin 的一些语法,然后就写了这个项目熟悉一下 Android的官方语言,总体下来,感觉比较爽,相比 Java 而言源代码行数有所减少、方法数也有所减少。所以就搭了一个mvp的框架,来与大家一起分享Kotlin

2020-07-30 13:00:38 284

原创 kotlin 解析Delegates 与lateinit之间的差异

The two models are similar, and one predates the other. Delegates.notNull() (api reference) is based on delegated properties and was the original, and later came lateinit (Late Initialized Properties). Neither cover all possible use cases and neither shou.

2020-07-29 15:59:10 361

原创 Kotlin object 和 companion object 的区别

一、 object关键字object 关键字可以表达两种含义:一种是 对象表达式 ,另一种是 对象声明。1、对象表达式继承一个匿名对象val textView = findViewById<TextView>(R.id.tv)textView.setOnClickListener(object : OnClickListener { override fun onClick(p0: View?) { Toast.makeText(this@Tes

2020-07-28 14:36:25 186

翻译 Kotlin 协程 - 协程取消篇

协程的任务的取消需要靠协程内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。1. 线程的中断我们先从大家熟悉的话题讲起。线程有一个被废弃的 stop 方法,这个方法会让线程立即死掉,并且释放它持有的锁,这样会让它正在读写的存储处于一个不安全的状态,因此 stop 被废弃了。如果我们启动了一个线程并让它执行一些任务,但很快我们就后悔了,stop 还不让用,那该怎么办?val thread = thread { ...}thread.stop() // !!! Depre.

2020-07-27 11:03:53 2432

转载 Kotlin 协程 - 异常处理篇

1. 引子我们在前面一篇文章当中提到了这样一个例子:typealias Callback = (User) -> Unitfun getUser(callback: Callback){ ...}我们通常会定义这样的回调接口来实现异步数据的请求,我们可以很方便的将它转换成协程的接口:suspend fun getUserCoroutine() = suspendCoroutine<User> { continuation -> getUser

2020-07-27 10:55:20 1585

原创 Kotlin 常量 静态方法

直接上代码,实例如下 class StaticTestActivity { companion object { val string1 = "string1" val string2= "string2" }}或者 class StaticTestActivity { companion object StaticParams{ val string1= "string1"

2020-07-24 13:51:36 293

原创 Kotlin 协程 - 协程启动篇

java初转kotlin 启动线程的写法:val myThread = thread {//do what you want}这个 thread 方法有个参数 start 默认为 true,换句话说,这样创造出来的线程默认就是启动的,除非你实在不想让它马上投入工作:val myThread = thread(start = false) {//do what you want}//later on …myThread.start()协程的启动其实与上面写的thead启动有相似的地

2020-07-23 14:10:13 577

转载 Kotlin DSL 的 使用

Kotlin DSL 的强大功能 :Gradle 的配置文件 build.gradle (Groovy),以及前面我们涉及到的Gradle Script Kotlin(Kotlin)、Anko(Kotlin)等,都是 DSL。我们可以看出,使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。Android 中使用下面这样的 嵌套DSL 风格的代码来替代 XML 式风格的视图文件 UI { // AnkoContext

2020-07-23 10:35:37 724

转载 kotlin- let,apply,with,run区别

let首先let()的定义是这样的,默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行,或者指定return代码示例:applyapply函数是这样的,调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象代码示例:withwith函数是一个单独的函数,并不是Kotlin中的extension,所以调用方式有点不一样,返回是最后一行,然后可以直接调用对象的方法,感觉像是let和apply的结合。代码示例:runrun函数和apply函数很像,只不过

2020-07-21 11:43:39 208

原创 Kotlin优势总结

简洁大大减少样板代码的数量/* 使用一行代码创建一个包含getters、 setters、 equals()、 hashCode()、 toString() 以及 copy() 的 POJO:*/data class Customer(val name: String, val email: String, val company: String)// 或者使用 lambda 表达式来过滤列表:val positiveNumbers = list.filter { it > 0 }//

2020-07-21 11:41:11 386

原创 Kotlin使用 arrayOfNulls 遇到的坑

当遇到固定长度的数组,但是值不确定的时候我们使用 arrayOfNulls 来创建数组代码如下:val strings = arrayOfNulls(size)以下是官方文档关于array的说明,https://kotlinlang.org/docs/reference/basic-types.html#arrays当我给array赋值的时候我开始使用了下面代码来赋值:strings[i] = “123456”当我把string array数组里面的值再次打印出来的时候显示:[null]于

2020-07-21 11:40:21 2060

转载 Kotlin协程

什么是协程?官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。协程很重要的一点就是当

2020-07-21 11:38:34 237

翻译 ConstraintLayout中属性layout_constraintDimensionRatio的使用

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schem...

2020-07-21 11:35:49 647

原创 NFC开发 - Android

Near Field Communication (NFC)为一短距离无线通信技术,通常有效通讯距离为4厘米以内。NFC工作频率为13.65 兆赫兹,通信速率为106 kbit/秒到 848kbit/秒,NFC手机相比普通手机来说,NFC整合了非接触式读卡器、非接触式智能卡和点对点(Peer-to—Peer)通信功能,为消费者开创了全新的便捷生活方式。手机和NFC技术的结合,将会给消费者提供极大的生活便利,例如移动支付、位置服务信息、身份识别、公共交通卡等应用,在医疗保健、优惠券、智能海报等许多领域有也有巨

2020-07-21 11:33:14 716

原创 Context 进阶

种写法就相当于我们把全局Context对象通过参数传递给了LitePal,效果和在清单文件配置LitePalApplication是一样的。思考:总结,如何在程序中正确的使用Context:一般Context造成的内存泄漏,几乎都是当Context销毁的时候,因为被引用导致销毁失败。而Application的Context对象可以简单的理解为伴随着进程存在的(它的生命周期也很长,毕竟APP加载的时候先加载Application,我们可以自定义Application然后继承系统的Application)。

2020-07-21 11:31:59 184

原创 第三方微信支付

微信支付微信支付是什么微信支付的流程微信支付正的很坑 1) 首先我们上套话微信支付是什么:微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。微信支付以绑定银行卡的快捷支付为基础,向用户提供安全、快捷、高效的支付服务。2)微信支付的流程 微信的支付的流程大致可分为 两步走原则(1)第一步呢就是调用微信支付提供de商户同意支付接口,获取第二步需要的预支付id,(prep

2017-01-17 11:10:30 600

原创 ShareElement

ShareElement什么是共享元素变换? 元素共享式变换(shared Element transition) 决定了共享的view元素从一个Activity/Fragment 到另一个Activity/Fragment 的切换时如何动画变化的。共享元素在被调用Activity进入和返回时播放动画,共享元素在进入和返回时的变换效果通过window和Fragment的如下的方法来设置: 进入:

2016-12-12 09:53:58 341

原创 OkHttp的初级使用

在Okhttp之前有android-async-http它的内部使用HttpClient (google在android6.0已经移除了HttpClient),还有国内的Xutils最新的额Xutils3还有2013年谷歌大会退出的Velloy 缺点是上传和下载大文件事它的弱项Okhttp内部依赖一个square公司出品的网络请求的库(okio)现在已经被google使用在android的

2016-11-22 15:18:12 291

空空如也

空空如也

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

TA关注的人

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