Android
文章平均质量分 85
奇舞移动
这个作者很懒,什么都没留下…
展开
-
Kotlin第十讲---作用域函数
前介在 Kotlin 中提供了一种扩展函数,功能尤为的强大。又为我们提供了 Lambda 表达式,简化我们的开发。在这些基础上 Kotlin 为我们提供了一系列的作用域函数(本质上还是通过扩展函数实现 + Lambda 实现的)。作用域函数什么是作用域函数呢?我的理解就是所有的对象,都可以使用这些函数来简化我们的操作,减少中间变量的创建,让我们的功能可以链式方式实现。(纯属个人理解)常见的...原创 2019-10-30 09:57:33 · 262 阅读 · 0 评论 -
Flutter 图片加载
前言本篇文章你将获得?1、Flutter 图片加载方式2、Flutter 图片加载源码实现流程3、Flutter 图片加载优化点有什么Flutter Image在 Flutter 中 Image 是展示图片的 widget ,用于从 ImageProvider 获取图像。Image 支持的图片格式有 JPEG、WebP、GIF、animated WebP/GIF 、PNG 、BMP、 ...原创 2019-10-30 09:47:23 · 824 阅读 · 0 评论 -
Java NIO之Scatter和Gather
前面的文章分享了Buffer和Channel,以及关于Buffer和Channel的基本操作。这篇文章继续分享关于Channel的Buffer的操作Scatter和Gather,这篇内容比较简单。什么是Scatter和GatherScatter和Gather的字面意思就可以分好的解释他们各自的用途。其中Scatter的意思是分散,Gather的意思是聚集,我们再来看一下他们是如何分散和聚集的,...原创 2018-12-12 09:42:30 · 229 阅读 · 0 评论 -
AccessiblityService知多少
最近研究了自动化操作的相关事宜,辅助服务就是其中一项技术。下面介绍一下相关方面技术。这项技术可以用作抢红包、App自动安装卸载、页面内容抓取,WX消息的自动发送、自动发送朋友圈,H5页面内容抓取也可以。原理对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务辅助这些用户更加简单地操作设备,包括文字转语音(不支...原创 2018-12-17 10:55:42 · 563 阅读 · 0 评论 -
Java NIO之Channel
今天来谈一谈NIO中的Channel,上一篇文章介绍了Buffer,有了Buffer还需要有一个通道来处理Buffer。它就是今天我们要学习的Channel。按照字面理解,它就是一个通道,可以从通道中读数据,也可以把数据写入到通道中。Channel可以分为几大类FileChannel(文件操作)SocketChannel(客户端TCP操作)ServerSocketChannel(服务端T...原创 2018-12-11 09:41:12 · 158 阅读 · 0 评论 -
Java NIO之Buffer
什么是NIO在计算机世界,要想和计算机交互必须有输入(Input)和输出(Output)才能把我们的请求发送给计算机,计算机处理后给我们一个结果,可见输入输出很重要。同理在Java中也有处理输入输出的模块。包括IO和NIO,其中IO相关代码在java.io包下,我们今天要聊的NIO在java.nio包下。这两种IO有什么区别呢?传统IO基于字节流和字符流进行操作,而NIO基于Channel和B...原创 2018-12-07 09:43:01 · 165 阅读 · 0 评论 -
Java NIO之Selector
前面两篇文章介绍了NIO中的Buffer和Channel,有了之前的基础,这篇文章来介绍一下另一个比较重要的概念----Selector。我们知道系统线程的切换是消耗系统资源的,如果我们每一个连接都用一个线程来管理,资源的开销会非常大,这个时候就可以用Selector。通过Selector可以实现一个线程管理多个Channel,如下图:Selector使用打开使用之前获得一个Selecto...原创 2018-12-14 09:53:47 · 160 阅读 · 0 评论 -
凑个热闹-LayoutInflater相关分析
前言最近给组内同学做了一次“动态换肤和换文案”的主题分享,其中的核心就是LayoutInflater类,所以把LayoutInflater源码梳理了一遍。巧了,这周掘金新榜和部分公众号都发布了LayoutInflater或者换肤主题之类的文章。那只好站在各位大佬的肩膀上,也来凑个热闹,分析一下LayoutInflater类。(前方长文预警,会有很多源码分析,源码基于Android 9.0)La...原创 2018-12-05 09:35:54 · 415 阅读 · 0 评论 -
Android修炼之混淆
自嘲时刻作为Java和Android开发者,大家应该都对混淆很熟悉了。网上也有各路大神提供的混淆模板,基本上直接拿来用就好。但我还是想捋一捋,因为工作中被混淆这家伙“玩弄”了好几次,必须把它记在小本本上。介绍基本概念混淆,字面上来说就是把项目中的包名、类名、方法名和变量名等进行更改,用以迷惑别人。但混淆其实包含了代码压缩、优化、校验等过程,把混淆称作ProGuard更合适。ProGuar...原创 2018-11-28 09:54:40 · 161 阅读 · 0 评论 -
基于ReactNative实现动态加载
背景最近看到某厂Android端物联网Demo演示应用中可动态加载模块,具体操作是在控制台拖拽生成一个模块和链接地址。然后在Android端刷新首页即可看到新添加的模块。下载Demo代码之后发现用到了facebook开源的react-native框架。然后打算研究一下是否能模拟动态下发模块的效果。于是决定从以下几个方面来实现这个过程。1、服务端——实现首页接口及下载接口服务端用Spring...原创 2018-12-24 09:41:32 · 5218 阅读 · 1 评论 -
Java常用数据结构之Stack&Vector
前言继续Java常用数据结构分析之路,这次的主角是Stack和Vector。Vector已经不推荐使用了,可以用ArrayList和LinkedList替代,它的主要特色是线程安全,代价自然就是效率。Stack则是拥有先进后出的特性,在特定的环境下能很好的工作。这两个类相较于List和Map的使用频率要少,但还是需要理解其内部原理的。类继承关系先来看Stack:public class S...原创 2018-12-24 09:46:42 · 159 阅读 · 0 评论 -
Java数据结构之PriorityQueue
前言Queue(队列)是拥有先进先出(FIFO)特性的数据结构,PriorityQueue(优先级队列)是它的子类之一,不同于先进先出,它可以通过比较器控制元素的输出顺序(优先级)。本文就来分析一下PriorityQueuede的源码,看看它是如何实现的。类继承关系先来看Queue接口:public interface Queue<E> extends Collection&l...原创 2018-12-24 09:49:24 · 199 阅读 · 0 评论 -
AccessibilityService防御
前面讲解了AccessibilityService知多少,详细描述了使用方法已经内部的原理,这节主要是防御手段。在网上也找到了很多资料,作为参考。下面就简单的说一说。1、检测辅助模式的开启之前提到过AccessibilityService类使用的是观察者模式,通过Binder机制在系统App1 view层->os->App2Service进行事件传递。由AccessibilityM...原创 2019-01-04 10:17:49 · 315 阅读 · 0 评论 -
Java迭代器spliterator(二)
传送门:Java迭代器spliterator(一)在上篇文章中,已经使用int数组简单说明了java 8中Spliterator的使用,上篇文章还有以下几个问题还没有解决:Arrays类使用的spliterator具体实现由哪些以上具体实现中Consumer有哪些类型集合是否提供了Spliterator操作具体实现如上图所示,Arrays的spliterator函数提供了4中...原创 2019-01-11 09:49:12 · 553 阅读 · 1 评论 -
Java迭代器spliterator
tags : java-collectionsspliterator是java1.8引入的一种并行遍历的机制,Iterator提供也提供了对集合数据进行遍历的能力,但一个是顺序遍历,一个是并行遍历。如上图所示,Arrays的分割迭代函数有2种形式,spliterator(xxx []), spliterator(xxx [] , int, int), 具体的xxx包括int, long, d...原创 2019-01-07 11:27:16 · 1162 阅读 · 0 评论 -
Xposed为你开启一扇窗
Xposed为你开启一扇窗Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作,在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接劫持、篡改、伪造一些信息。原理探究Android平台的动态劫持,通过替换/system/bin/app_process程序控制zygote进程,使...原创 2019-01-18 10:23:57 · 792 阅读 · 0 评论 -
Flutter从加载到显示
你将会得到什么?1、Widget、Element、RenderObject基本概念2、在Flutter Framework层从创建到渲染的流程3、Flutter在构建布局方面是如何提高效率的什么是Flutter?Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全...原创 2019-08-08 15:09:23 · 2207 阅读 · 0 评论 -
Kotlin第一讲 数据类型
boolean类型 val b: Boolean = true val b1: Boolean = falseNumber 类型可定义的类型类型字节长度Double64Float32Long64Int32Short16Byte8如何定义fun main() { /** * 默认都是 double...原创 2019-09-04 11:54:48 · 197 阅读 · 0 评论 -
Kotlin第四讲——神奇的条件循环语句
内容简介:主要讲解 Kotlin 中的判断丶循环丶选择语法,以及与 Java 的不同之处简介一门语言离不开条件和循环语句,Java 与 Kotlin 的条件和循环语法上有了一定的区别,Kotlin 的语法更为的智能,并且语法支持返回结果(不得不说相当惊艳的设计)。if else 表达式if else 语句大家应该再熟悉不过了吧?Kotlin 的 ...原创 2019-09-12 08:08:00 · 182 阅读 · 0 评论 -
Vector和ArrayList对比
本文会对ArrayList和Vector进行分析,为什么会关注这两个类,主要是因为他们拥有相同的继承结构,接下来就来探索下这两个类实现和效率的异同。继承结构可以看到,Vector和ArrayList都实现了List和RandomAccess接口,都继承了AbstractList。通过他们的继承结构,大致可以猜测他们在元素的处理上存在很多相同的地方。存储结构Vector和ArrayList...原创 2018-11-30 09:44:12 · 175 阅读 · 0 评论 -
来玩一下ADB
前言Android 调试桥(Android Debug Bridge,简称ADB)是 Android 的一个通用命令行工具。它可以帮助PC与模拟器实例或连接的 Android 设备进行通信。它为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell 的访问。工作方式ADB是客户端-服务端模式的程序,包含三个组件:客户端:该组件发送命令,在开发计算机上运行。可以通过发出 A...原创 2018-11-15 10:04:45 · 174 阅读 · 0 评论 -
Android修炼之检测非SDK接口
前言上篇文章Android修炼之Pie 适配的搬运工中介绍了Android P的一些行为变更并提供了一些对齐刘海和非SDK接口的适配建议,大部分人还是更加关心非SDK接口的问题,所以本文来说一下如何检测非SDK接口。区分SDK接口和非SDK接口一般来说,SDK接口是指在Android框架软件包索引中记录的接口,其对立面自然就叫非SDK接口了。Android 9引入了针对非SDK接口的使用限制...原创 2018-11-19 09:55:28 · 1062 阅读 · 5 评论 -
SparseArray原理分析
SparseArray和其他的Android容器类一样,都是为了更加有效地利用内存,说直白点,就是为了节省内存。SparseArray和ArrayMap一样,都是为了更高效的保存int值到非原始类型的映射,用了同样的数据结构,但是为了提高效率,SparseArray也做了自己的优化。接下来就分析一下SparseArray的存储,添加和删除元素。继承结构上图表明,```SparseArray...原创 2018-10-30 09:55:07 · 277 阅读 · 0 评论 -
Android中的Gradle之配置及构建优化
Android中的Gradle之配置及构建优化一、Gradle简介1、Gradle是什么?2、对比其他构建工具3、Gradle的安装与配置二、Gradle项目目录结构1、基本gradle项目2、android studio中的gradle目录结构三、构建配置文件解释1、settings.gradle2、gradle.properties,local.properties3、根目录build.gra...原创 2018-10-24 09:37:39 · 345 阅读 · 0 评论 -
Android中的icon适配
一、icon的简介icon是应用图标,官方建议将图标根据不同的dpi放置在res/mipmap文件夹下。二、icon的发展历史1、官方系统官方系统在8.0前后存在一些区别,在8.0系统之前,android允许自定义icon形状。7.0系统之开始,对launcher界面做了圆形的限制,8.0系统对icon提出了新的制作方式,包括背景层和前景层,官方命名为Adaptive Icons。8.0...原创 2018-10-31 09:49:36 · 1941 阅读 · 0 评论 -
关于HandlerThread你应该知道的一切
什么是HandlerThread先来看看官方给的说明Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.从它的名字 HandlerThrea...原创 2018-10-26 09:20:01 · 244 阅读 · 0 评论 -
Java常用数据结构之List
JDK 11正式发布了,Oracle终于出了一个长期维护版本,应该将是继JDK 8之后的一个常规使用版本。前言作为Java系开发者对Java集合类的使用应该是较为频繁的,也是面试中经常会被问的问题。一直想整理一下Java集合和Android中的优化集合类,借这次机会把Java中的常用集合都整理一遍。由于JDK 11已出,本系列文章中的源码都来自JDK 11(集合这部分应该没什么变化)。L...原创 2018-10-29 09:55:35 · 131 阅读 · 0 评论 -
Android中的Gradle之玩转自定义功能
一、概述通过上一节Android中的Gradle之配置及构建优化,我们已经了解了Gradle的各个配置项的含义,知道了如何优化构建配置,但只会用别人提供好的,无法按自己的意愿实现功能。通过本章节,我们将简单介绍Groovy,了解Gradle中的Project与Task,引入gradle脚本,根据android plugin插件提供的功能自定义扩展,以及写自己的Task及自己的gradle插件,相...原创 2018-10-25 09:22:00 · 423 阅读 · 0 评论 -
ArrayMap是如何提高内存的使用效率的?
ArraySet使用数组保存数据,提高了内存的使用效率,在数据量不超过1000时,相较于HashSet,效率最多不会降低50%,本节来分析下ArraySet 添加和删除元素分析,谷歌指出ArrayMap的设计也是为了更加高效地使用内存,在数据量不超过1000时,效率最多不会降低50%。阅读原码可以发现,ArrayMap和ArraySet在实现上保持了统一,主要的不同是元素的存储方式。继承结构...原创 2018-10-15 10:54:13 · 466 阅读 · 0 评论 -
Android修炼之Pie 适配的搬运工
自嘲时刻Android P正式版(以下称为Pie)已经正式上线了,各大厂商已经开始了系统升级工作,咱做上层开发的也得跟上节奏。当然了,新版本所有的行为更改内容都可以在官网上找到,对于其中如何绕开非SDK接口限制的问题,也有各路大神给出了解决方案。所以,我只能当搬运工了(偷笑ing)。下面我会结合现有的开发经验,聊聊Pie中对我们开发影响较大的一些更新,重头戏还是适配齐刘海和非SDK接口限制。行...原创 2018-09-26 19:24:12 · 733 阅读 · 0 评论 -
设计模式之装饰模式
前言为什么要写装饰模式?这几天在工作中又遇到了RePlugin。在RePlugin中有插件和宿主的概念,插件和宿主分别有自己的Context。通过以下两个方法可以分别获得宿主和插件的Context。RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出"全面插件化"(全面特性、全面兼容、全面使用)的方案。...原创 2018-11-01 09:05:23 · 157 阅读 · 0 评论 -
Java常用数据结构之Map-AbstractMap
前言Map集合是用来存储<Key, Value>键值对数据的,是日常开发中使用最多的数据结构之一。Map集合相对List集合来说结构会稍微复杂一些,所以Map系列会分开写。本文主要分析AbstractMap。类图Map接口中定义了各种基本方法,而键值对数据实际是保存在Entry中的。AbstractMap类和AbstractList类一样,都是一种模板类,提供了Map的基本实现...原创 2018-11-06 09:49:22 · 170 阅读 · 0 评论 -
在Android上优雅的申请权限
简介对于权限,每个android开发者应该很熟悉了,对于targetSDK大于23的时候需要对某些敏感权限进行动态申请,比如获取通讯录权限、相机权限、定位权限等。在android 6.0中也同时添加了权限组的概念,若用户同意组内的某一个权限,那么系统默认app可以使用组内的所有权限,无需再次申请。这里贴一张权限组的图片:申请权限API先介绍一下android 6.0以上动态申请权限的流...原创 2018-11-21 09:41:04 · 380 阅读 · 0 评论 -
Android容器类小结
系列文章地址:Android容器类-ArraySet原理解析(一)Android容器类-ArrayMap原理解析(二)Android容器类-SparseArray原理解析(三)Android容器类-SparseIntArray原理解析(四)相较于其他设备,移动设备有自己的特点,内存小是一个很突出的问题,Google针对android设备的这一特点,开发了一套容器框架,目的就是为了更加高效...原创 2018-11-12 10:23:15 · 739 阅读 · 0 评论 -
SparseIntArray原理分析
SparseIntArray原理分析SparseArray优化了int到Object键值对的存储,SparseIntArray优化了int到int键值对的存储。android中在键值对存储上的优化主要做了一下几种类型的优化:int–&amp;gt; Object(SparseArray)int–&amp;gt; int(SparseIntArray)int–&amp;gt; boolean(SparseBool...原创 2018-11-08 09:38:16 · 588 阅读 · 0 评论 -
Android Jetpack之ViewModel
概述ViewModel仍然是Model的范畴,是数据对象的载体,但是多了与视图(View)生命周期的绑定关系。可以简单理解为带有生命周期的数据对象。可在Activity, Fragment中使用,保证其在生命周期内的唯一性和一致性,不受配置的更改(例如屏幕旋转)。使用场景某页面屏幕旋转导致Activity/ Fragment销毁重建数据不能保存。你可能会说我用onSaveInstanceS...原创 2018-11-13 09:38:54 · 657 阅读 · 1 评论 -
Android中的sharedUserId
一、manifest标签包含内容<manifest xmlns:android="http://schemas.android.com/apk/res/android" // 命名空间 android:versionCode="1" // 版本号,会被gradle中覆盖,不推荐 android:versionName="1.0" // 版本名称,同上 andr...原创 2018-11-05 09:44:42 · 885 阅读 · 0 评论 -
聊聊Context
在上篇文章《设计模式之装饰模式》中我们谈到了装饰模式,在 Android 中关于 Context 的设计就用到了装饰模式。这篇文章我们就来聊一聊 Context。关于 Context,作为 Android 开发人员再熟悉不过了。启动 Actiivty、Service 需要 Context,获取资源需要 Context。离开 Context 整个系统都玩不转了,可见 Context 在 Andro...原创 2018-11-05 09:43:45 · 115 阅读 · 0 评论 -
Java常用数据结构之Map-HashMap
前言上篇文章中介绍了AbstractMap抽象类,本文就来分析一下HashMap类。jdk1.8对HashMap进行了大幅优化。在jdk1.8之前,HashMap的实现是数组+链表,即通过拉链法来解决Hash冲突。假设链表的长度为n,则链表中查找元素的时间复杂度为O(n),如果n特别大,就会很耗时。在jdk1.8中,HashMap的实现改成了数组+链表+红黑树,即当n超过某个阀值时,会将链表转化...原创 2018-11-07 09:43:36 · 161 阅读 · 0 评论 -
Android快捷方式-Shortcuts
就在前几天,跟一同事车回家,他用的是iOS版高德,每次发车前,重力长按高德icon,弹出shortcuts,很方便就进入回家的导航,也就是iOS 3D Touch功能。如下面这张图,截图来自647 iPhone X 。今天得空研究了一下,Android 在Android 7.1(API 25) 添加了App快捷方式的新功能,由ShortcutManager类来管理,这样开发者可以随意定义快速进...原创 2018-11-09 09:43:54 · 228 阅读 · 0 评论