
android
BATTERIA
这个作者很懒,什么都没留下…
展开
-
Android自定义Lint检查-CustomLint
仓库地址背景1、大多代码规范都浮于表面,全靠开发自觉和Code Review来保障导致很多遗留的老大难问题。2、基础模块很多规范只能通过注释或者文档来约束。相关文档安卓自定义lint实现LintOption 文档AS Lint支持设计目标开发自定义Lint规则,通过Android Studio提供的Inspections实时检测代码,对不规范的代码进行实时提示。能够实时进行代码规范提示 实现仅对单个模块生效 可以控制提示等级 不增加包体积 不占用过多的系统内存原创 2020-12-10 12:37:14 · 864 阅读 · 0 评论 -
PopupWindow崩溃处理记录
一、Attempt to read from field 'int android.view.ViewGroup$LayoutParams.width' on a null object referencejava.lang.NullPointerExceptionAttempt to read from field 'int android.view.ViewGroup$LayoutParams.width' on a null object reference崩溃堆栈:机型统计:原创 2020-11-11 16:05:16 · 957 阅读 · 0 评论 -
Kotlin-对范型的理解、对比Java
泛型的意义泛型(参数化类型)代码复用。多种类型执行相同代码类型安全,编译器检查类型。泛型的类型在使用时指定,不需要强转。通配符超类型下界限定符? super T 指定类型参数的下限(该类型必须是类型T或者它的父类型)= in子类型上界限定符? extends T 指定类型参数的上限(该类型必须是类型T或者它的子类型) = out无界通配符 ?在Kotlin中强调了生产消费的概念,in是消费,out是生产。// 逆变interface Consumer<in T> {原创 2020-09-18 11:17:28 · 130 阅读 · 0 评论 -
Kotlin-内联相关问题inline、noinline、reified、crossinline
inline意义:函数在运行时都会生成一个对象,很多的小函数意味着额外的开销,使用内联函数则会在编译时进行优化。// examplelock(l) { foo() }inline fun <T> lock(lock: Lock, body: () -> T): T {...}// generatel.lock()try { foo()}finally { l.unlock()}noinline如果希望只内联一部分传给内联函数的 lambda原创 2020-09-18 11:13:41 · 420 阅读 · 0 评论 -
关于ContentProvider
一、ContentProvider的基本使用及原理实现ContentProvider接口,并在AndroidManifest中注册它,设定特定URl。创建ContentResolver对象,使用相应URI调用ContentProvider中的相应方法。二、注册在xml文件中声明进程启动->Activitythread.main->ActivityThread....原创 2019-03-20 11:31:15 · 242 阅读 · 0 评论 -
关于BroadcastReceiver
一、BroadcastReceiver的基本使用原理使用观察者模式,发送者通过IPC向AMS发送广播,接收者通过IPC向AMS注册,AMS会根据发送者的要求寻找合适的接受者通过IPC发送广播,接收者在消息循环中解决接收到的广播。注册接收者分动态注册和静态注册,静态注册在AndroidManifest中使用<receiver>标签注册,动态注册推荐在Activity的onResu...原创 2019-03-20 10:07:01 · 224 阅读 · 0 评论 -
Android消息机制详解
一、ThreadLocal功能:对某些线程间共享的对象,对其建立副本,防止多线程并发冲突。实现方法:1.在Thread类中存在ThreadLocal.ThreadLocalMap对象,key是ThreadLocal对象,value是T副本对象。2.实例化ThreadLocal对象,调用set(T)方法,会自动获取当前Thread存到当前线程ThreadLocal.ThreadLoc...原创 2019-03-14 14:37:13 · 103 阅读 · 0 评论 -
Retrofit与Rxjava结合使用实例
环境配置在Module:app的build.gradle下添加如下依赖,然后sync now。下面这些依赖有些没有用到,暂时都添加进去不会有错。dependencies { implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:adapte...原创 2018-09-28 12:07:49 · 605 阅读 · 0 评论 -
Rxjava初步从Rxjava1到Rxjava2--响应式编程
Rxjava概述a library for composing asynchronous and event-based programs using observable sequences for the Java VM翻译一下大概是,一个在JVM上为了构建(异步、基于事件、并使用了观察者序列的)程序的库。响应式编程是一种面向数据流和变化传播的编程范式。Eventbus也是基于...原创 2018-09-27 15:55:19 · 306 阅读 · 0 评论 -
RecyclerView应用--点击事件处理
RecyclerView安卓原生的RecyclerView相比同样原生的老古董ListView功能上更加的强大和灵活。目录RecyclerView继承RecyclerView.Adapter绑定Adapteritem点击事件item内控件的点击事件继承RecyclerView.Adapter和ListView一样,RecyclerView也需要自己的Adapte...原创 2018-09-27 23:25:30 · 777 阅读 · 1 评论 -
ButterKnife--黄油刀简单应用
概述ButterKnife是一个使用了注解的控件资源初始化工具。暂时记录一下ButterKnife的简单应用,对于GreenDao与ButterKnife连接,dagger,还有安卓原生的Data Binding的使用和具体底层实现后续学习。github:https://github.com/JakeWharton/butterknife安装首先在module:app的buil...原创 2018-09-27 14:22:12 · 266 阅读 · 0 评论 -
Android线程学习----异步消息处理2
AsyncTask为了更加方便我们在子线程中对UI进行操作,Android还提供了另一个方便的工具--AsyncTask,Android为我们封装好了异步消息处理。使用实例直接掏出我在项目中实际使用的例子展现一下该接口的实际效果。@Overrideprotected void onResume() { super.onResume(); newMessagesT...原创 2018-10-03 11:31:16 · 147 阅读 · 0 评论 -
Android线程学习----异步消息处理1
Handler异步消息处理机制Android中的异步消息处理主要有4个部分组成Message、Handler、MessageQueue和Looper。Message:负责线程间传递消息Handler:用于收发信息MessageQueue:用于存放消息的队列,每个线程都只有一个该对象Looper:用于持续监测队列中是否存在消息,将其取出 直接上实例代码每隔一秒显示一个...原创 2018-10-03 11:08:09 · 134 阅读 · 0 评论