自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android实现RecyclerView二级列表可折叠展开选中

前言项目里需要实现个可折叠,可展开的的二级列表,首先想到了用ExpandListView去实现,ExpandListView是继承ListView的。由于项目里所有列表都用Recycleview,再加上本身对于Recyclerview情有独钟,懂的都懂,就想着试试用它实现吧。效果图实现网上找到了ExpandableRecyclerView这个库,读了一遍源码,然后将BaseExpandableRecyclerViewAdapter拷贝到项目中,简单能够显示出来出来,因为我们的业务需求需要实现可选择

2021-01-15 17:40:37 4319 3

原创 Android将数据导出为excel文件的方法

项目中需要将未上传的数据导出到excel,供用户可见。不同的模块传入数据类型不一样。所以用了List<ArrayList>将数据封装成二维string类型。效率还挺高build.gradle中引入jxl库。 // https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'先上效果图在这里插入图片描述

2020-12-25 17:36:00 3700 5

原创 WorkManager of Jetpack’s Architecture Components

介绍WorkManager 旨在用于可延迟运行(即不需要立即运行)并且在应用退出或设备重启时必须能够可靠运行的任务。例如:向后端服务发送日志或分析数据定期将应用数据与服务器同步步骤将 WorkManager 添加到您的 Android 项目中将以下依赖项添加到应用的 build.gradle 文件:dependencies { def work_version = "2.4.0" // (Java only) implementation "androidx.

2020-08-21 17:21:19 189

原创 Android音视频开发学习——硬解码

本篇文章较长,记录自己学习安卓中音视频相关知识的笔记。视频帧视频由许多个帧构成,一个帧相当于一张图片 。帧率是单位时间内的帧数,决定了视频的流畅度。单位是帧/秒或者frames per second(fps),越大视频越自然流畅。电影帧率 :24,25fps游戏帧率:30,60 fps色彩空间是在某些标准下用通常可接受的方式对彩色加以描述。用于彩色监视器和一大类彩色视频摄像。RGBRGB图像具有三个通道R、G、B,分别对应红、绿、蓝三个分量,由三个分量的值决定颜色YUV是根据一个亮

2020-08-11 11:05:00 4286

原创 Android中NFC相关技术(二)

前言上一篇主要介绍了安卓NFC相关的基础知识,这节主要来看看项目中使用到的知识支持的标签技术Android 通过 android.nfc.tech 软件包对这些用例提供一般性支持,如表 1所述。您可以使用 getTechList() 方法确定标签支持的技术,还可以使用 android.nfc.tech 提供的一个类来创建相应的 TagTechnology 对象。表 1. 支持的标签技术类说明TagTechnology这是所有标签技术类都必须实现的接口。NfcA提供对

2020-08-03 17:19:49 626

原创 Android中NFC相关技术(一)

NFC是Near Field Communication(近场通信)的简称。是一种新兴的技术,使用了NFC技术的设备(例如移动电话)可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来的,通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、电子票务、门禁、移动身份识别、防伪等应用。支持 NFC 的 Android 设备同时支持以下三种主要操作模式:读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸

2020-08-03 17:17:12 900

原创 Room and Rxjava2

前言关于Room的介绍和基本操作,请看我的这篇文章Room of Jetpack's Architecture Componentsrxjava特点先来简单介绍一下这几个属于RxJava的对象的特点。Completable:只有onComplete和onError方法,即是只有“完成”和“错误”两种状态,不会返回具体的结果。Single:其回调为onSuccess和onError,查询成功会在onSuccess中返回结果,需要注意的是,如果未查询到结果,即查询结果为空,会直接走onError回调

2020-06-23 16:08:28 1402

原创 kotlin特性自定义DialogFragment

title: kotlin特性自定义DialogFragmentdate: 2020-06-19 15:59:27tags: [kotlin,安卓]介绍DSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言,比如大家耳熟能详的 SQL 和正则表达式。今天,我展示如何实现某种类型的DSL,我们将在Kotlin中包装一个现有的Java Builder。在java中我们经常会用到构建者模式,例如,如果您是Android开发人员,您一定使用了Alert.

2020-06-19 16:17:13 1751

原创 android新的网络状态NetworkUti

在Android中compileSdkVersion为29时,NetworkInfo被标记为deprecated。现在根据Network来判断/** * @Author: kanghanbin * @Description: NetworkUtil判断网络状态是否可用 * @CreateDate: 2020/4/27 14:16 */val Context.isNetWorkAvailable: Boolean get() { val con

2020-06-18 10:57:11 377

原创 Observable.hide的用法

一、问题Observable类中的hide方法有什么用?我阅读了该文档,但仍然不知道它的用途,我看到很多人在使用它Hides the identity of this Observable and its Disposable.Allows hiding extra features such as Subject’s Observer methods or preventing certain identity-based optimizations (fusion). there are a l

2020-05-21 11:39:31 844

原创 华为手机断点调试5秒左右自动断开的问题

今天开发完后,程序有bug,然后使用Android studio连着我的p30断点调试程序,发生了恶心的一幕——断点调试几秒后自动断开,程序ANR。重点是之前我的p30都可以调试。mmp,我以为是我断点打的有问题,检查完程序和断电后发现没有问题。于是就面向网络编程搜索了下问题。就发现了下面这幅图:看来出现这种问题的不在少数。我就挨着看这个帖子想从中找到大佬们咋解决的。反映问题的人多,回答问题的机会没有,翻到最后一页我记得这是关于华为手机开启Log的方法呀(以前遇到过华为手机不显示Log.

2020-05-13 10:08:35 5317 8

原创 Android SharePreferences源码解读

前言在安卓开发中经常被用到,它是一个轻量级的存储类,通过key——value的形式用于保存一些配置参数。下面通过源码分析SharePreferences主要类首先介绍源码的分析过程中涉及到的一些类PreferenceManager:静态方法通过传入Context获取一个SharedPreferences实例ContextImpl:Context的实现类,真正获取SharedPrefer...

2020-04-17 16:44:25 395

原创 MultiDex的加载dex源码分析

工作流程MultiDex的工作流程具体分为两个部分,一个部分是打包构建Apk的时候,将Dex文件拆分成若干个小的Dex文件,这个Android Studio已经帮我们做了(设置 “multiDexEnabled true”),另一部分就是在启动Apk的时候,同时加载多个Dex文件(具体是加载Dex文件优化后的Odex文件,不过文件名还是.dex),这一部分工作从Android 5.0开始系统已经...

2020-04-11 09:51:19 324

原创 Java和Android中的类加载机制——ClassLoader

Java中的ClassLoader通过ClassLoader来查找和加载Class文件到java虚拟机中,系统ClassLoader主要包括这三种,分别是Bootstrap ClassLoader、 Extensions ClassLoader和 App ClassLoader。ExtClassLoader和AppClassLoader都继承自URLClassLoader,它们都是Launche...

2020-04-05 14:13:41 235

原创 TextView文字左右对齐

默认Textview显示中文英文效果如下,右边没有对齐自定义TextView如下:class AlignTextView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatTextView(context, ...

2020-03-13 12:55:24 3409

原创 Git版本控制常用命令学习汇总

前言看完了廖雪峰老师的git讲解,写篇文章总结一下,希望以后用得着的时候进来看看最简单的首先git分为工作区——暂存区——git add:所有修改放到暂存区(Stage)git commit -m "提交信息":一次性把暂存区的所有修改提交到分支git status :查看工作区状态git diff:可以查看工作区和暂存区修改内容git log :显示提交日志(显示com...

2020-02-14 23:58:31 129

转载 Android 5.0以上系统常用控件着色指南

简介当我们新建一个项目的时候,都会给Application或者某些Activity设置theme:<android:theme="@style/AppTheme">这时就需要我们选择或者自定义一个主题,那每个属性又都是什么含义呢?来看个例子:<style name="AppTheme" parent="@style/Theme.AppCompat.Lig...

2020-02-12 23:40:18 216

原创 安卓中View的事件分发机制

前言都到了二月份了,才是我2020年的第一篇文章,今天是正月十五元宵节。过了今天意味着春节正式结束了。然而大家都知道今年的春节是个非常难受痛苦的春节。新型冠状病毒席卷整个中国,在这里向奋斗在一线的医护人员致敬,您们辛苦了!! 同时也希望国家早日战胜病毒,武汉加油,中国加油!事件从Activity传递到跟ViewGroup1.当事件产生后,首先传递到当前的Activity,调用Activity...

2020-02-08 23:07:47 172

原创 Room of Jetpack's Architecture Components

Room也是一个安卓rom框架,但作为Android的亲儿子,并且原生支持LiveData和Rxjava嵌套使用。配合上其他谷歌组件应该会更香吧Room 主要包含三个组件: Database: 包含数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。这个类需要用@Database 注解,并满足下面条件: 必须是继承RoomDatabase的抽象类 注解中包含该...

2019-12-02 17:34:58 153

原创 Kotlin中带参的单例模式

在Kotlin中,单例模式被用于替换该编程语言中不存在的static成员和字段。 你通过简单地声明object以创建一个单例:object SomeSingleton与 class 不同,object不允许有任何构造函数,如果有需要,可以通过使用init代码块进行初始化的行为:object SomeSingleton { init { println(...

2019-11-29 15:18:54 3438 1

原创 Kotlin关键字Reified在安卓开发中的用法

前言Reified使(抽象的东西)更具体或更真实。 Kotlin中的这个关键字使Kotlin成为用于Android开发的更好的语言。 共有3个明显的优点,如下所示。1.不再需要传参数clazz这也是大多数文章中最可能描述的一个比较明显的优点,这里也提及一下。如果希望具有一个用于启动activity的扩展函数,则必须有一个作为Class传入的参数。// Functionpriva...

2019-11-28 16:35:53 781

原创 神兵利器Dragger2学习篇

Dagger ,早有耳闻,但一直没有与他正真的认识过。Dagger 英文翻译为“匕首”,这可能就是把它称作神兵利器的原因。当我看一些开源项目在使用dagger2时,我停止了前进的步伐,查阅了网上一些层差不齐的资料后,感觉还是懵逼状态,正当我感受到了从入门到放弃的状态时,看到了一篇相对好理解一写的博文,我又开始踏上了从放弃到入门之路。背景(日常念经,了解一下)Dagger ,鼎鼎大名的Sq...

2019-11-19 17:06:24 587 1

原创 lateinit 和 by lazy 的比较

前言Kotlin 基于 Java 的空指针提出了一个空安全的概念,即每个属性默认不可为null。 在某个类中,如果某些成员变量没办法在一开始就初始化,并且又不想使用可空类型(也就是带?的类型)。那么,可以使用lateinit或者by lazy来修饰它。lateinit被lateinit修饰的变量,并不是不用初始化,它需要在生命周期流程中进行获取或者初始化。lazy而 lazy(...

2019-11-14 11:23:04 2122 1

原创 Lambda 表达式

简介Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。1.Java 8 的 Lambda在 Java 8 之前我们使用 Thread 可能是这样的: new Thr...

2019-11-12 15:51:02 137

原创 kotlin中的嵌套类和内部类和枚举类

嵌套类(Nested Class)Kotlin 的嵌套类是指定义在某一个类内部的类,嵌套类不能够访问外部类的成员。除非嵌套类变成内部类。class Outter1 { val str:String = "this property is from outter1 class" class Nested { fun foo() = println(""...

2019-11-12 10:41:34 166

原创 搞清kotlin中的inline、noinline和crossinline

Kotlin 使用高阶函数也会带来一些隐性地成本:产生函数对象实例、造成方法数量的增加、产生函数的调用等等。在 Kotlin 中使用内联函数时,有时结合这几个关键字可提高程序性能。概览inline: 声明在编译时,将函数的代码拷贝到调用的地方(内联) noinline: 声明inline函数的形参中,不希望内联的lambda crossinline: 表明inline函数...

2019-11-07 17:56:58 922 2

原创 AsyncTask的原理解析

前言AsyncTask是一个常用的已经封装好的异步任务类,可以更加方便地执行后台任务以及切换主线程去更新UI。从实现上来说,它封装了Thread(线程池)和Handler。定义一个抽象的泛型类,提供了Params, Progress, Result三个泛型参数。a. Params:开始异步任务执行时传入的参数类型,对应excute()中传递的参数 b. Progress:异步任务...

2019-09-17 16:49:57 173

原创 Android Handler 的工作原理解析

前言提到Handler大家应该都不会陌生,它是安卓中消息机制的主要核心类,配合MessageQueue和Looper一起使用构成了我们所熟悉的Android消息机制。Handler的主要工作是将一个任务切换到指定的线程去执行,因为Android中规定访问UI只能在主线程中进行,如果在子线程中访问UI,会抛出异常。而Android中不建议在主线程执行耗时操作否则会造成ANR,所以说。系统提供Ha...

2019-09-16 17:58:12 117

原创 Android中IPC机制之Messenger

前言Messenger翻译为“信使”,顾名思义,可以在不同进程中传递Message对象。Messenger是一种轻量级IPC方案,底层实现也是AIDL,只是对AIDL做了封装。Messenger的使用相对于AIDL方便多,因为Messenger是Android系统中自带的类,服务端和客户端都不用创建AIDL文件。Messenger会持有一个Handler,这个Handler用于处理接受到的信息...

2019-08-21 10:03:31 118

原创 aidl的学习记录3

aidl相关文章首先放出前两篇关于aidl的文章,没看过的可以看下。aidl的学习记录aidl的学习记录2前言要实现服务端每增加一本书,会主动通知客户端。不用客户端一直去调用getBooks获取最新书,采用观察者模式。当服务端有新书到来时,会通知每一个已经注册监听的客户端,并把新书对象传给客户端。具体实现1.由于AIDL无法使用普通接口所以需要新建一个aidl接口INe...

2019-08-16 11:02:44 140

原创 aidl学习记录2

前言首先,这篇文章主要是基于上一篇文章aidl的学习记录来继续学习的,所以没看过上一篇文章的可以先看看。AidlBookManager文件上一篇文章通过aidl在build/generated/source/aidl/你的 flavor/下生成一个 Java 文件AidlBookManager.java。/* * This file is auto-generated. ...

2019-08-14 13:22:57 219

原创 aidl的学习记录

一、aidl简介aidl(Android Interface Definition Language ),安卓接口定义语言,在 Android 中,每一个进程都有自己的DalvikVM实例,都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭小的空间里过完自己的一生。每个进程之间都你不知我,我不知你,就像是隔江相望的两座小岛一样,都在同一个世界里,但又...

2019-08-14 13:15:47 101

原创 序列化与反序列化之Serializable和Parcelable

面试场景Android 开发中对两个 Activity 之前传递数据,应该很熟悉吧?嗯,当然没问题。一般采用Intent.putXXX()就可以实现各种轻量级数据的传递。那对于自定义的 Object 呢?直接使用Bundle.putSerializable()即可。需要把对象实现Serializable接口,最后使用Intent.putExtras(Bundl...

2019-08-13 11:19:12 210

原创 RxPermissions源码解析

前言AndroidM(6.0)开始,系统增加了运行时动态权限,目的在于保护用户隐私,防止一些敏感的危险权限在应用安装时被随意获取,用户可以清晰地选择是否允许app某项权限,就算没有给予某个权限,也不影响其他功能的使用,不至于令用户无法安装。以下权限都被列为危险权限,即需要运行时动态获取的权限。身体传感器日历摄像头通讯录地理位置麦克风电话短信存储空间原始使用方法第...

2019-08-12 10:53:45 305

原创 Activity的生命周期和启动模式

activity的生命周期正常情况下activity的生命周期如下图所示:整个生命周期,onCreate 和onDestroy,onStart和onStop,onResume和onPause都是一一配对的。问题当前Activity为A,用户打开新的ActivityB,B的onResume和A的onPause方法那个先执行?当启动一个新的activity是,旧的activ...

2019-08-12 10:52:15 144

原创 方舟编译器的引发的学习惨案

昨天公司给了部p30,开机体验了下,确实不错。运存8g+内存128g+cpu麒麟980搭载EMUI9.1,重点是华为公布的方舟编译器。并向业界开源改工程,于是赶紧上网学习了下关于Android ART JVM的知识,也可以给别人吹吹牛逼方舟编译器到底干了个啥。简介方舟编译器可供开发者在开发环境一次性的将高级语言编译为机器码,手机安装应用程序后可全速运行程序,带来效率上的极大提升。根据华为实...

2019-07-31 16:23:45 746

原创 Java中的LinkedList的方法的应用

introduceLinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:分配内存空间不是必须是连续的;插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的...

2019-07-17 11:06:00 434

原创 在Android中使用Kotlin Coroutines

What are Coroutines?拆开Coroutines 这个单词来看 Coroutines = Co + Routines 在这里,Co意味着合作,而Routines意味着功能。这意味着当函数相互合作时,我们将其称为协同程序Introduction可以将coroutine视为轻量级线程。与线程一样,协同程序可以并行运行,彼此等待并进行通信。协同程序的最大优点是非常便宜,几乎...

2019-06-28 14:49:09 4224

原创 第一个Flutter应用之Helloworld

背景Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。1.0版本于2018年12月5日(北京时间)发布。安装环境和配置1.获取 Flutter SDK 下载下面的安装包以获取最新版本 stabl...

2019-06-18 09:49:24 494

原创 带你初识kotlin(五)

介绍集合是大多数编程语言的常见概念通常包含相同类型的一些(数目也可以为零)对象。集合中的对象称为元素或条目。集合类型Kotlin标准库提供了基本集合类型的实现:集合,列表和映射。 一对接口代表每种集合类型:Aread-onlyinterface that provides operations for accessing collection elements. Amuta...

2019-06-04 13:56:15 330

空空如也

空空如也

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

TA关注的人

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