RecyclerView 悬浮吸顶效果实现,支持数据绑定及Touch事件 诸如联系人列表、分类页商品类表等分组场景,都可能需要悬浮吸顶的效果。Android 官方并未提供原生的组件来实现这个功能,因此需要我们自定义实现。网上看到的基本实现思路都是通过 ItemDecoration ,在滑动过程中去根据当前滑动位置,绘制吸顶的视图。如果只是需要简单的绘制,确实通过这个方式要简单的多。但是通过这种方式无法支持 Touch 事件。感兴趣的可以参考一下这个:https:/...
RecyclerView Adapter 实现自动多 ViewType 前言多Type的列表在App中很常见,例如各种电商类App的首页,甚至是购物车、订单详情页面等。我们暂且将页面上每个ViewType对应的模块称之为楼层。那么,以电商订单详情举例,可能有以下楼层:订单状态(交易成功、交易关闭等)物流信息收货地址订单商品信息列表价格相关信息订单信息(订单号、交易流水号等)其他一些展示信息那么,我们可以通过不同的 ViewType 来区分这些模块...
IDEA 插件开发 文章目录前言插件工程创建插件工程结构plugin.xmlPlugin ActionAction 是什么创建Action注册Action快速创建Action运行插件打包插件安装插件Plugin ComponentsComponents 类型创建 Component获取 Component 实例持久化PropertiesComponentPersistentStateComponent注册持久化组件G...
关于 RecyclerView 优化的一些建议 RecyclerView 几乎已经取代了 ListView & GridView,但为了达到更好的性能体验,还是需要做一些适当的优化的。布局优化首当其冲,减少层次结构、减少过渡绘制,可以提高item的解析测量与绘制的效率。另外,应该尽量避免多次measure & layout 次数。1、 View 的三大过程 从ViewRoot的 performTraversals() 方法开始,依次经过 mea
滴滴开源Android插件化框架VirtualAPK原理分析 概述Activity 支持Hook ActivityManagerServiceHook Instrumentation启动插件ActivityService 支持ContentProvider 支持Receiver 支持小结概述滴滴出行公司的首个对外开源项目 - VirtualAPK。地址:https://github.com/didi/VirtualAPK滴滴自行研发了这款插件化
从源码的角度解析Handler、Looper、Message和MessageQueue 导语HandlerHandler 作用MessageMessage 结构Message 创建及发送MessageQueueMessageQueue 结构插入消息读取消息LooperLooper 创建Looper 开启循环线程阻塞问题结语导语虽然很基础的一个东西,然是最近面试中还是常常最被问到,而且都是到源码层,因此决定再造一...
手把手带你撸一套Android简易ORM框架 ORM概念实体模型建立注解列ID主键自增长数据表的列实体基类实体类映射成表结构数据库操作封装数据库升级ORM概念对象关系映射(Object Relational Mapping),通俗来讲就是建立关系型数据库与业务实体对象之间作一个映射关系。对于Java后端来说,例如mybatis、hibernate等,在Android平台下,常见的数据库映射框架有 GreenDAO、Realm
HashMap 内部原理 HashMap 内部实现通过名字便可知道的是,HashMap 的原理就是散列。HashMap内部维护一个 Buckets 数组,每个 Bucket 封装为一个 Entry 键值对形式的链表结构,这个 Buckets 数组也称为表。表的索引是 密钥K 的散列值(散列码)。如下图所示:链表的每个节点是一个名为 Entry 的类的实例。 Entry 类实现了 Map.Entry 接口,下面是
Android 7.1.1 之实现 3D Touch 转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/68962736Shortcut概念具体实现BuildConfig 配置静态配置动态配置创建删除或禁用更新返回栈问题Shortcut概念Shortcut 是Android-25(Android 7.1)新增的一项类似iOS的 3D Touch 功能的快捷方式组件,但
JVM 基础知识 JVM 概念类加载器子系统装载链接初始化JVM 内存模型方法区Method Area堆区Heap Area栈区Stack Area程序计数器Program Counter Register本地方法栈Native Method Stacks执行引擎Java Native Interface JNI本地方法库JVM 概念JVM(Java Virtual Mechine,Java
Android 7.0 之拍照与图片裁剪适配 在Android 7.0以上,在相机拍照和图片裁剪上,可能会碰到以下一些错误:android.os.FileUriExposedException: file:///storage/emulated/0/xx.jpg exposed beyond app through ClipData.Item.getUri()exposed beyond app through Intent.getData()
Android View 绘制流程 View 绘制机制一、 View 树的绘图流程当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw。整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)
RxJava 从入门到出轨 RxJava:https://github.com/ReactiveX/RxJava前言RxJava 概念初步理解作用 - 异步模式 - 观察者模式结构 - 响应式编程优势 - 逻辑简洁RxJava 依赖RxJava 入门事件产生事件消费不完整定义回调入门示例RxJava 进阶Scheduler线程控制变换map操作符flatMap操作符RxJava 其他常用操作
Android 如何应用ttf图标字体库 作为一个Android开发者,自己想做一个app练手,有个比较头疼的问题就是没有UI图标资源~~ 其实很容易搞定的,下面就来聊聊如何在Android中应用图标字体库,找图标不再纠结! 图标库传送门:https://icomoon.io/app/#/select1、点击左上角菜单 -> Manager Projects 进入管理页面。 2、点击New Project, 创建一个工程,如First
关于Retrofit2+Okhttp3实现统一添加请求参数和重定向 Android开发中难免会遇到一些比较“不友好”的服务端接口。比如以前遇到的json数据中,某个字段偶尔为Object,偶尔为List… 最近遇到的一个问题就是:所有请求接口都要增加一个token参数… 并且token参数有可能过期,比如请求某一条接口,如果token失效则在该请求的响应中把新的token带回来,客户端就得用新的token再次发送该请求,类似重定向。token失效的stateCode
一个 2 年 Android 开发者的 18 条忠告 原文:What 2 Years of Android Development Have Taught Me the Hard Way前言不要重复造轮子不要盲目的选择library坐下来喝杯咖啡阅读更多的代码看在上帝的份上维护一个恰当的编程规范吧你需要ProGuard是的你真的需要使用一个恰当的架构用户界面就像笑话如果还需要解释那就糟糕了分析是你最好的朋友做一个营销专家是时候优化
深入理解金融交易报文Iso8583协议 深入理解金融交易报文ISO8583协议字段域解释前言最初)金融系统只有IBM这些大公司来提供设备)象各种主机与终端等,后来有很多大大小小的公司进入)怎样设计一个报文协议)解决各公司金融系统之间的报文交换)暂且称该协议叫做ISO8583协议。例如“回头客会员管理系统”POS机上应用的就是8583报文。金融行业涉及到的数据内容是比较少的)如交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁
10 个你有可能不知道的Android Studio技巧 英文原文:medium当你想不起来某个功能怎么用的时候修改快捷键你需要了解的自动补全在自动提示以后使用 Tab 键替换当前的方法或值当你写完了一行代码三个定位的小技巧根据后缀自动生成的代码模板Debug 时自定义对象显示的技巧总结Android Studio 是每一个 Android 开发每天都要使用的工具,但是即使你是一个经验丰富的开发人员,你也可能已经错过了许多可以节约生命的
详解Android/IOS平台下抓包工具使用以及抓取API接口 抓包工具Charles主机允许代理模式客户端设置代理截获数据包HTTPS模仿一个appUI请求接口封装加密请求Header抓包(Packet Capture),实际上就是对网络请求(包括发送与接收)的数据包进行截获、重发、编辑、转存等操作,在Android下,也经常被用来进行数据截取等。学会抓包之后,获取某个App的API就是轻而易举的事了,当然,现在有很多App,都对API进行
从源码角度一步步分析AsyncTask的用法与原理 前言AsyncTask特点AsyncTask简单使用原理分析总结AsyncTask 是Android特有的一个轻量级异步抽象类,在类中通过doInBackground()在子线程执行耗时操作,执行完毕在主线程调用onPostExecute()。前言众所周知,Android视图的绘制、监听、事件等都UI线程(主线程,Main Thread)执行,如果执行访问网络请求、数据库等耗时操作,可能会阻
JS实现类似于微博秀的GitHub挂件 先来几张效果图。GitHub用户信息挂件 GitHub代码库信息挂件 GitHub个人贡献信息挂件 为CSDN博客添加GitHub用户信息挂件 实现GitHub用户信息挂件<script src="../js/github_user_widget_en.js"></script>
-bash :gradlew command not found mac下执行gradlew命令时,提示-bash :gradlew command not found,主要原因是Android Project根目录下地gradlew文件没有执行权限。打开终端,执行以下命令:sudo chmod +x gradlew为gradlew增加可执行权限。值得一提的是,mac下执行当前目录下的命令需要在前面加上“./”,否则会到环境变量下找相应命令。例如./gradlew
Android 实现气泡布局/弹窗,可控制气泡尖角方向及偏移量 Android 自定义布局实现气泡弹窗,可控制气泡尖角方向及偏移量。效果图实现首先自定义一个气泡布局。/** * 气泡布局 */public class BubbleRelativeLayout extends RelativeLayout { /** * 气泡尖角方向 */ public enum BubbleLegOrientation {
Java 实现顺时针螺旋二维数组输出 看到一道有点意思的逻辑算法题,便着手实现一下。打印 N*N顺时针螺旋数组,规律如下:// 1 2 3 4 5// 16 17 18 19 6// 15 24 25 20 7// 14 23 22 2
Java/Android 编码规范,从第一行代码开始 转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/52219812谈到编码规范,对于团队项目开发来说,是很有必要的。如果说代码是一种社会行为,那么代码规范可以说是法律,通过法律来约束行为。养成一个良好编码规范的习惯,一是可以统一代码风格;二是便于团队成员协作开发;三是在review代码的时候,更加容易精确地判断需要修改的地方;四是提高
Android 图片选择器,丰富的配置选项,极大程度的简化使用 Android 图片选择器。支持图库多选/单选/图片裁剪/拍照/自定义图片加载库,极大程度的简化使用。优点1、通过实现ImageLoader接口,可以实现自定义图片加载器的功能。例如可以用Glide、Picasso、ImageLoader,暂不支持Fresco,因为SimpleDraweeView本身并不属于ImageView。当然,也可用相同的思路来实现。 2、可配置的ImgSelConfig。
SprintNBA 完整的NBA第三方Android客户端,包含NBA头条新闻、视频集锦/赛场花絮、比赛直播(目前支持比赛前瞻、文字直播、球队及球员技术统计)、球队战绩排行、球员数据排名、虎扑论坛专区(已实现发帖与回复功能)、球队及球员的详细资料。本项目的API均来自NBA中文官网与虎扑体育,纯练手之作,个人未从中获取任何利益,其所有内容均可在NBA中文官网与虎扑体育获取。数据的获取与共享可能会侵犯到NBA中文官
利用Gradle发布项目到JCenter、Maven 利用Gradle发布Android项目到JCenter Android Studio将远程仓库默认指定为Jcenter仓库,位于Bintray网站。Bintray网站下面还有其他好几个仓库。本文主要介绍如何将Android项目发布到Jcenter。注册Bintray账号Bintray官网:https://bintray.com 也可使用GitHub账号登录。获取APIKey上传项目之前我们需要
银联标准之MAC算法实现(POS终端加密) 本文详细讲解银联标准MAC算法的过程,以及通过Java代码来实现这一运算过程。POS终端采用ECB的加密方式,简述如下:将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0x00”下面举个例子来说明MAC算法的过程: MAB =
从Java反射机制到Android注解框架 一、Java反射机制1、定义 JAVA反射机制是在“运行状态”中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了几个功能:在运行时判断任意一个对象所属的类、在运行时构造任意一个类的对象、在运行时判断任意一个类所具有的成员变量和方法
解决AndroidStudio导入项目在 Building gradle project info 一直卡住 Android Studio导入项目的时候,一直卡在Building gradle project info这一步,主要原因还是因为被墙的结果。gradle官网虽然可以访问,但是速度连蜗牛都赶不上...解决办法主要有两种,一是直接下载gradle离线包,二是修改项目的gradle-wrapper.properties里的gradle版本为自己电脑已有的版本。离线包下载导入方式查看所需gradle版
浅析Android Activity的启动过程 Activity作为Android的四大组件之一,也是最基本的组件,负责与用户交互的所有功能。Activity的启动过程也并非一件神秘的事情,接下来就简单的从源码的角度分析一下Activity的启动过程。根Activity一般就是指我们项目中的MainActivity,代表了一个Android应用程序,一般也是在一个新的进程中启动起来。在Android系统中,所有的Activity组件都保存在堆栈
关于Android开发的40条优化建议 以下是开始Android编程的好方法: 1、找一些与你想开发的功能类似的代码; 2、调整它,尝试让它变成你想要的; 3、回顾开发中遇到的问题 4、使用StackOverflow来解决遇到的问题对每个你想实现的东西重复上述过程。采用这种方法能够激励你,因为你在保持不断迭代更新,在这个过程里面你会学到很多。当然,当你发布应用的
Android MarsDaemon实现进程及Service常驻 前段时间,就讨论过关于如何让Service常驻于内存而不被杀死,最后的结论就是使用JNI实现守护进程,但是不得不说的是,在没有修改系统源码的情况下,想真正实现杀不死服务,是一件很难的事情,目前除了白名单的方式,也好像没有发现有一款APP能做到不管怎么搞它都能自动重启...最近在GitHub上发现了一个比较有意思的轻量级库:MarsDaemon,进行一些简单的配置,就可以实现在android上实
Android Studio 使用正式签名进行调试 在Android Studio中,可以使用Gradle进行打包时自动签名。其实Android Studio默认会给调试应用加上Debug签名,但有时候调一些第三方SDK时,需要正式签名才能调起来,所以接下来分享一下使用Gradle自动签名的方法。一、创建签名文件打开AS,选择Build->Generate Signed APK,选择要打包的项目,点击Next,再点击Create new..
MVP for Android: 如何组织显示层的内容 MVP(Model View Presenter)模式是从众所周知的MVC(Model View Controller)模式中派生出来的,这在Android开发中变得越来越重要。越来越多的人在谈论MVP,但实际上可靠的、有条理的信息很少。这就是我为何要用这个博客来鼓励大家讨论,然后把我们所有知识以最好的方式应用到我们项目中来。什么是MVP?MVP模式允许从业务逻辑中拆分出表示(presen
通俗理解Android中View的事件分发机制及滑动冲突处理 说起Android滑动冲突,是个很常见的场景,比如SliddingMenu与ListView的嵌套,要解决滑动冲突,不得不提及到View的事件分发机制。一、Touch事件传递规则分析首先,我们要知道Touch事件是包装在MotionEvent对象中的,在手指与屏幕接触过程中产生一系列事件,典型的事件有以下三种:ACTION_DOWN:手指刚接触屏幕的瞬间ACTION_UP:手指
Mac如何上传项目源代码至GitHub 提起GitHub大家并不陌生,GitHub也算为“开源”做出突出的贡献了~ Git这种良好支持分支管理的分布式的SCM真正解决了一个问题问题:每个工程师在自己本地分支上开发,完成功能以后往master分支合并。关于Windows下GitHub的一些使用,随处可见。本文着重介绍如何在Mac OSX下上传本地的项目源代码至GitHub。首先当然是安装Git工具。1、下载Git instal
Android框架模式之MVC与MVP MVC (Model-View-Controller):顾名思义,M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型我们可以才用多种视图模型,例如进度条显示,我们可以采用圆环、直线、容器式的试图显示,当然,一种视图模型也可以对于多种逻辑模型。MVC的作用:将M层和V层的实现代码分离,从而使同一个程序可以在同一View下,有不同的表现形式;而C层则是确保M层和V层的同步,一旦M层有改变,
Genymotion错误之INSTALL_FAILED_CPU_ABI_INCOMPATI 运行App到Genymotion,出现了这么个错误:Installation error:INSTALL_FAILED_CPU_ABI_INCOMPATI。Google官方的解释是由于引用了其他非android的sdk编译环境编译的二进制代码导致的,有如下两种解决办法:1、libs目录如果有其他jar包,把libs里的jar包拿出来放到项目的buildpath里面即可解决。2、下载
Android实现流量统计和网速监控悬浮窗 很多安全卫士类软件都实现了网速监测功能,也算是一个比较实用的功能。Android下,TrafficStats类实现了对流量的统计。static long getMobileRxBytes()//获取通过Mobile连接收到的字节总数,但不包含WiFi static long getMobileRxPackets()//获取Mobile连接收到的数据包总数 static long get
Android 全局异常捕获之CrashHandler 一个App上线或者投入到生产环境的时候崩溃了,还不知道是什么原因,这肯定是开发者的痛...所以肯定要加入全局异常捕获,如果项目较大的话,可以考虑加入第三方诸如友盟的崩溃统计插件,以达到异常捕获的效果!Crash,可以理解为崩溃、垮台,通常来讲就是App运行期间发生了不可预料的错误,虽然在经历发布之前,测试人员进行了大量的测试,但是并不能保证App的正常运行,总会或多或少有一些BUG的。
浅谈Android开发中内存泄露与优化 内存泄露是在Android开发中尤其要重视的一个问题,对开发人员开说,这是一个很容易犯也很常见的错误。优化内存泄露的问题,主要从两方面着手,一是开发人员避免写出有内存泄露的代码,二是通过一些诸如MAT的内存分析工具来找出潜在的内存泄露并解决它。其实平时遇到的最多的情况,就是对Activity或Context保持一个长生命周期的引用。下面主要来分析一下造成内存泄露的各种原因。一、静态变量导致
Android实现应用的增量更新\升级 虽然很多App的版本更新并不频繁,但是一个App基本上也有几兆到几十兆不等,在没有Wifi的条件下,更新App是非常耗流量的。说到这个吐槽一下三大网络运营商,4G网络是变快了,但是流量确没有多,流量仍然不够用,治标不治本,并没什么卵用。随着各类App版本的不断更新和升级,App体积也逐渐变大,用户升级成了一个比较棘手的问题,Google很快就意识到了这一点,在IO大会上提出了增量升级,国内诸如
Android 通过JNI实现守护进程 开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了...网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本:1、提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然并卵...
Android 无需root实现apk的静默安装 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk:Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(file), "app
禁止Mac Safari下载zip文件后自动解压缩 看起来zip包自动解压功能倒是贴心,可是有时候zip包比较大,下载后不想立即解压。怎么关闭呢?Safari>偏好设置>通用>下载后打开“安全的”文件(取消前面方框中的勾选)
Android Volley增加Https支持,允许SSL Volley默认是不支持Https请求的。如果Https服务器是单向认证,则增加以下允许SSL就可以。先增加SsX509TrustManager类,代码如下package com.lakala.net.volley.toolbox;import java.security.KeyManagementException;import java.security.NoSuchAlgo
解决mac下adb devices命令找不到设备 在Eclipse或者Android Studio下可以调试,但是在终端下执行adb devices命令找不到设备的问题error: device not found - waiting for device - 。1、确保Android手机已经连上电脑,并且打开USB调试。2、MAC终端下,命令行执行system_profiler SPUSBDataType,显示外
常用的C库头文件 C系统提供了丰富的系统文件,称为库文件,C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件, 在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、 类型定义、宏定义、函数原型以及各种编译选择设置等信息。另一类是函数库,包括了各种函数的目标代码,供用户在程序中调用。 通常在程序中调用一个库函数时,要在调用之前包含该函数原型所在的".h" 文件。ALLOC.H
C语言 标准库函数 实际上库函数并不是C语言的一部分,它是由人们根据需要编制并提供用户使用的。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSI C标准提出了一批建议提供的标准库函数,它包括了目前多数C编译系统所提供的库函数,但也有一些是某些C编译系统未曾实现的。考虑到通用性,本篇博文主要列出ANSI C标准建议提供的、常用的部分库函数。对多数C编译系统