Android
文章平均质量分 88
JackMeGo
这个作者很懒,什么都没留下…
展开
-
Android版中文分词器:原理、接入和启动优化
Android版中文分词:原理、接入和启动优化结巴分词的原理接入方式启动速度优化中文分词功能是一项常用的基础功能,有很多开源的工程实现,目前能应用于Android手机端的中文分词器没有很完善的版本。经过调研,我选择了结巴分词,该开源工程思路简单,易于理解,分词效果也还不错,目前有众多语言版本,PYTHON、C++、JAVA、IOS等,暂时还没有Android版本,所以我在Java版本的基础上进行...原创 2018-11-21 16:37:57 · 1386 阅读 · 0 评论 -
Http协议的格式及实例
Http协议的格式及实例Http RequestHttp ResponseUser-agent键值对Cookie键值对Http协议位于网络五层结构的最上层应用层。它建立在TCP协议之上,是个无状态的协议,典型的应用是网络浏览器以及移动端数据传输。本文将介绍Http请求的格式,并对请求数据的各部分做一个详细介绍。Http协议包括多个方法:Get,Post,Put,Delete,Head,Pa...原创 2018-11-26 15:48:59 · 359 阅读 · 0 评论 -
Groovy在gradle中的应用
Groovy在gradle中的应用GroovyGradletask对生命周期的响应productFlavors使用Groovy一种基于JVM(Java虚拟机)的敏捷开发语言,能够与 Java 代码很好地结合。Groovy特点:1) Groovy 的松散的 Java 语法允许省略分号和修改符。2) Groovy 的所有内容都为 public,除非另行指定。3) Groovy 允许定义简单...原创 2018-11-26 15:48:54 · 391 阅读 · 0 评论 -
AnimatedLinearLayout:带删除动画的LinearLayout
AnimatedLinearLayout:带删除动画的LinearLayout本文介绍一个自定义ViewGroup:AnimatedLinearLayout,在普通的LinearLayout基础上,它实现了删除某一项后,后面的项依次前移或上移的动画效果,效果如下:GitHub下载地址代码如下:在onMeasure函数中加入init函数,该函数负责记录AnimatedLinearLayou...原创 2018-11-26 15:48:49 · 240 阅读 · 0 评论 -
Dex格式解析及在Tinker中的应用
Dex格式解析及在Tinker中的应用Part 1:怎样生成差量补丁1. ManifestDiff2. ResDiff/SoDiff3. DexDiffHeaderTableDataPart 2:怎么加载新的apkTinker:全量替换,无须插桩传统的热修复需要插桩实现,插桩的原因和操作:原因:1. 通过将补丁dex文件插入到类加载器的dexElement列表最前面,完成热修复2. 调...原创 2018-11-26 15:48:43 · 177 阅读 · 0 评论 -
Android Material Design库用法举例
Android Material Design库用法举例TextInputLayoutFloatingActionButtonsnackbarCoordinatorLayoutToolBar隐藏效果Toolbar折叠效果FooterView的隐藏和展示效果Android 5.0 Lollipop版本加入了Material Design库,通过这个库,开发人员可以轻松实现体现了Material ...原创 2018-11-26 15:48:38 · 615 阅读 · 0 评论 -
Android Icon-fonts:像文字一样操作图标
Android Icon-fonts:像文字一样操作图标在Android手机上,每种字体实际上就是一套图片,每个图片由一个个点阵组成,并赋予一个对应的Unicode编码。同样的道理,我们可以把一些常用的图标也制作成字体格式,分配Unicode编码,并像使用文字一样的使用这些图标,这就是Icon fonts的用法,这种方法经常被用于前端开发中。相比于使用Drawable对象,Icon font...原创 2018-11-26 15:48:32 · 586 阅读 · 0 评论 -
Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式Url拦截的方式JavaScript注入方式Native调用JavaScript在Android WebView使用中,经常需要H5页面和Native页面进行交互,比如在网页上点击分享按钮,调用本地分享接口进行分享,分享成功后本地调用网页的JavaScript代码展示一条分享成功的消息。实现H5页面和Native页面交互的方法有两种,一种是Url...原创 2018-11-26 15:48:26 · 1084 阅读 · 0 评论 -
Android HttpDns:我的域名我做主
Android HttpDns:我的域名我做主之前公司的产品遇到了用户忽然无法登陆使用的问题,后来查明是因为在用户发布的内容里有一张被判定为黄图的图片,导致我们的域名被运营商封锁。还有一种情况,部分地区的用户使用我们的产品时页面上被莫名插入了广告,后来发现也是运营商搞的鬼,劫持了我们的网站数据,并私自插入了广告。这里暴露出了依赖网络运营商进行域名解析的一些问题,总结如下:1. 域名封锁。运营...原创 2018-11-23 11:21:00 · 1019 阅读 · 0 评论 -
Android常用的设计模式之一:Builder模式
Android常用的设计模式<一>:Builder模式设计模式是在日常的编程工作中对一些常见的问题场景总结出来的最优编程套路,通过这种抽象和总结,可以在遇到类似的需求时快速使用对应的设计模式,实现高效优雅的编程。在Android日常开发中,我们也会经常使用一些实用性强,具有代表性的设计模式,对这些设计模式进行了解和学习,不仅有助于我们理解Android框架下的代码,包括一些著名的开...原创 2018-11-22 10:41:46 · 148 阅读 · 0 评论 -
Android常用的设计模式之二:观察者模式
Android常用的设计模式<二>:观察者模式在上一篇Android常用的设计模式<一>:Builder模式中,介绍了Builder设计模式,本文将介绍另一种常用的设计模式,观察者模式。观察者模式涉及到两个基本概念,观察者和事件,思路很简单,事件对象将所有关心该事件的观察者对象添加在自己维护的一个Vector容器中,完成注册,当事件被触发时,通知列表中的对象,这些对象依...原创 2018-11-22 10:41:55 · 118 阅读 · 0 评论 -
Android常用的设计模式之三:策略模式
Android常用的设计模式<三>:策略模式前两篇文章分别介绍了Builder模式和Observer模式,本文将介绍另一种Android里面经常用到的设计模式,策略模式。策略模式是一种通俗易懂的设计模式,常用于组织一些可替换的算法组件,这些算法组件本质上完成同一个性质的任务,可以互相替换,只是实现细节上存在些许差异。举个例子,为了完成射击敌人的任务,我们可以采取不同的武器进行,...原创 2018-11-22 10:42:04 · 108 阅读 · 0 评论 -
源码阅读系列:Picasso源码阅读
源码阅读系列:Picasso源码阅读Picasso初始化加载图片Android开发中,我们经常用到各种开源框架,很多优秀的框架不仅提供了功能丰富的功能接口,其高超的代码编写和组织水平也值得我们学习。通过学习这些框架的源码,有助于快速提高我们的编程质量。在接下来的博客中,我将对一系列优秀的开源框架源码进行阅读分析,目的有两个,一是理解框架的实现机制,从源码的角度去分析怎样更好的使用这些框架。二是从...原创 2018-11-23 11:20:52 · 155 阅读 · 0 评论 -
Android App内截屏监控及涂鸦功能实现
Android App内截屏监控及涂鸦功能实现Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,将自动展示该截屏,并提供用户随意圈点涂鸦,添加马赛克,撤销,分享等功能。本文GitHub源码地址实现效果如下:实现该功能有以下技术需求:1. 当app在前台展示的时候能够自动监听用户在...原创 2018-11-22 10:41:32 · 1146 阅读 · 0 评论 -
自定义Gradle插件相关知识
自定义Gradle插件相关知识Gradle内核本身提供的自动化构建功能十分有限,所有实际的功能都是通过插件的形势提供的,如编译Java代码的功能。通过插件可以:1. 添加新的Tasks,比如JavaCompile Task2. 在Gradle中添加新的对象,比如SourceSet对象,该对象用于添加一些约定的规则,像是Java源码放在src/main/java路径下3. 扩展Gradle...原创 2018-11-23 11:20:30 · 134 阅读 · 0 评论 -
Python+Android进行TensorFlow开发
Python+Android进行TensorFlow开发Tensorflow是Google开源的一套机器学习框架,支持GPU、CPU、Android等多种计算平台。本文将介绍在Tensorflow在Android上的使用。Android使用Tensorflow框架需要引入两个文件libtensorflow_inference.so、libandroid_tensorflow_inferenc...原创 2018-11-23 11:20:23 · 787 阅读 · 0 评论 -
Android JNI开发之Friso分词功能
Android JNI开发之Friso分词功能NDK是Google开发的一套开发和编译工具集,用于Android上JNI编程。通过NDK我们可以在Android上执行C/C++代码,进行一些CPU密集型的运算,比如游戏引擎,信号处理,物理仿真等。本文将通过在Android上调用Friso库实现分词算法讲解NDK开发的流程。Friso是一个开源的使用C语言编写的中文分词库,通过在Android...原创 2018-11-23 11:20:14 · 348 阅读 · 0 评论 -
SurfaceView实现简单的相机
SurfaceView实现简单的相机SurfaceView继承自View,主要用来展示视频流的绘制,典型的应用场景是相机,视频播放器,游戏界面绘制等。它独立于UI线程进行绘制,所以不会阻塞UI线程。本文将结合一个简单的相机demo介绍SurfaceView的使用。Github Demo地址我们实现的相机功能很简单,可以进行相机预览,点击拍照按钮拍照,并展示拍摄的照片,点击确定返回相机预览界...原创 2018-11-26 15:49:07 · 383 阅读 · 0 评论 -
Android动画技术分析
Android动画技术分析本文将介绍Android动画的实现技术。Android动画实现有三种技术,逐帧动画(Drawable Animation),补间动画(View Animation)和属性动画(Property Animation)。下面列出了三者的特点:1. 逐帧动画 图片一帧帧的播放,类似动画片2. 补间动画 将原始图片进行一系列的变换:平移,选择,缩放,淡入淡出。 缺...原创 2018-11-26 15:49:13 · 167 阅读 · 0 评论 -
BottomSheet效果的两种实现方式
BottomSheet效果的两种实现方式单页面添加BottomSheet效果BottomSheetDialog实现通用效果BottomSheet的效果是指从屏幕底部向上滑的效果,是MaterialDesign风格的一种,视觉效果如下:实现这种效果有几种不同的方式,如果是在一个固定的页面上添加这种效果,可以在该页面布局中添加BoottomSheet相关的控件。如果是作为通用控件来提供给不同页...原创 2018-11-21 16:50:56 · 898 阅读 · 0 评论 -
Android开发模式:MVP Vs MVVM
Android开发模式:MVP Vs MVVMMVP优点缺点MVVM优点缺点Android常用的开发模式包括MVC,MVP以及MVVM。标准MVC模式不适用于Android的开发,在标准的MVC开发模式中(如网络请求的服务器开发),action(一个URL请求)首先被Controller接收,Controller读取Model的数据,生成View并返回。但是在Android中,Activity...原创 2018-11-21 16:58:14 · 179 阅读 · 0 评论 -
Android事件传递机制(Touch Event System)
Android事件传递机制:Touch Event System本文Github源码下载Android事件传递机制跟布局的层次密切相关,一个典型的布局包括根节点ViewGroup,子ViewGroup,以及最末端的子View,如下图:在这种结构中,上层是RootViewGroup,下层是子View,当我们点击子View的时候,点击事件从上层依次往下层传递,传递的过程调用dispatchTo...原创 2018-11-21 17:04:10 · 179 阅读 · 0 评论 -
自定义View实践:指南针的实现
自定义View实践:指南针的实现本文将介绍如何通过自定义View实现了一个指南针的效果,效果图如下:源码GitHub地址首先是根据磁力计和加速度计计算南向和手机的夹角。通过Android的SensorManager类进行计算,使用的是右手坐标系:获取SensorManager,并初始化磁力计和加速度计:public class CompassActivity extends AppC...原创 2018-11-21 17:06:22 · 329 阅读 · 0 评论 -
Dagger2使用简介
Dagger2使用简介Dagger是最早由Square公司开发的一款开源的依赖注入工具(Dagger1, 版本1.x),现在由Google接手进行开发和维护(Dagger2, 版本2.x)。Dagger2相比于Dagger1有不少改动的地方,效率更高,本文将通过Demo讲解Dagger2的用法。本文Github源码下载在Demo的两个分支(without_dagger_branch、with...原创 2018-11-21 17:08:56 · 212 阅读 · 0 评论 -
Android插件化技术介绍
Android插件化技术介绍FacebookGoogle美团网微信携程网其他技术方案360的 DroidPlugin开源框架XposedAndroid插件化的目的主要有两个,第一个是应对每个dex包65536个方法数的上限问题,第二是实现功能复杂的app的拆解,能够按需下载和加载运行所需的模块。插件化的实现并没有统一的标准或方式,很多公司都有自己的一套插件化方案,而且没有哪个公司的方案被业界普...原创 2018-11-21 17:16:49 · 303 阅读 · 0 评论 -
从Android源码分析Activity加载流程
从Android源码分析Activity加载流程概述:startActivity->startActivityForResult->Instrumentation::execStartActivity->scheduleLaunchActivity->performLaunchActivity->handleLaunchActivity->handleResu...原创 2018-11-21 17:19:26 · 260 阅读 · 0 评论 -
Android多线程的四种方式
Android多线程的四种方式Handler+ThreadPost方式sendMessage优缺点适用范围AsyncTask优缺点适用范围ThreadPoolExecutor适用范围IntentService特点当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。通常一个应用的所...原创 2018-11-21 17:23:19 · 165 阅读 · 0 评论 -
Android数据库ORM框架:GreenDAO使用简介
Android数据库ORM框架:GreenDAO使用简介特点使用步骤PropertyRelationIndex使用DAO API进行CRUD操作:执行raw sql语句Android最常用的数据库是SQLite,通常使用SQLite进行CRUD操作需要记住一些常用的SQL语句,这不利于提高开发效率,而且很容易出错。ORM(Object-Relational Mapping)框架的引入使得对数据库...原创 2018-11-21 17:25:56 · 321 阅读 · 0 评论 -
Android信息统计和崩溃收集工具
Android信息统计和崩溃收集工具用户行为数据收集友盟TalkingDataCountlyFlurry(Yahoo)MixpanelGoogle Analyticsapp性能数据收集听云Android移动应用数据统计工具按照功能划分为两类,一类是用户行为数据收集,如新增注册用户数,留存用户数,活跃用户,PV、UV等,代表工具包括国内的友盟,TalkingData,以及国外的Countly,Fl...原创 2018-11-27 18:11:33 · 1089 阅读 · 0 评论 -
Android测试技术
Android测试技术Local Unit testInstrumented testsInstrumented Unit TestUI Test本文Github Demo地址相比于服务器测试的高度自动化,Android app的测试因其交互性复杂,运行需要Android环境,并且测试用例编写比较琐碎等原因,在大部分公司通常单纯由测试人员手工完成,自动化程度比较低。每次版本迭代需要把所有的路...原创 2018-11-27 18:11:27 · 340 阅读 · 0 评论 -
Dialog使用介绍
Dialog使用介绍简单的对话框含列表的对话框自定义view样式Dialog和Activity交互Dialog展示Dialog取消展示Dialog展示WebView,监听后退键本文Github Demo地址Dialog是Android里面用于让用户确认或输入信息的简单的UI展现形式,本文将通过Demo讲解如何使用Dialog。通常,我们不应该直接使用Dialog,而是应该使用Dialog的子...原创 2018-11-27 18:11:18 · 1537 阅读 · 0 评论 -
从Oppo手机拍照无法展示谈图片压缩
从Oppo手机拍照无法展示谈图片压缩实际项目中遇到一个需要拍照上传然后展示图片的功能,该功能在其他手机上都测试没问题,唯独Oppo手机拍摄的照片无法展示,后来发现是因为号称“拍照手机”的Oppo拍摄的照片分辨率过高的问题。该图片是jpg格式,分辨率为3120*4160。单纯在电脑上查看大小不过3.1M,为什么3.1M大小的图片都能导致OOM(Out Of Memory)错误呢?本文将进行讲解,...原创 2018-11-27 18:11:11 · 1412 阅读 · 0 评论 -
从Android源码分析View绘制流程
从Android源码分析View绘制流程关键路径摘要getWidth/getMeasuredWidth, getHeight/getMeasuredHeight的区别是什么丰富的View类型是Android手机的一大亮点,我们每天都在跟View打交道,了解View的绘制流程有助于我们更好的布局,以及实现漂亮高效的自定义View。本文将结合Android源码讲解View的绘制流程,不会拘泥于细节...原创 2018-11-27 18:11:01 · 240 阅读 · 0 评论 -
ClassyShark分析App信息
ClassyShark分析App信息嘀嘀出行用户端春雨医生诊所端App春雨医生用户端ClassyShark是Google开发的一个用于Android App分析的工具,可以分析jar, class, apk, dex, so, aar类型的文件。利用Classyshark对App进行分析,可以了解到该App采用了什么样的框架,用到哪些开源组件和技术,从而了解技术趋势,做到学以致用。Class...原创 2018-11-27 18:10:55 · 3612 阅读 · 0 评论 -
Android编译流程和Gradle使用
Android编译流程和Gradle使用打包过程Gradle文件体系Configure Build TypesConfigure Product FlavorsConfigure dependencyConfigure signing settingsAndroid工程的编译打包是个复杂的过程,期间既涉及到工程自身的源代码、资源文件、AIDL文件,又涉及到工程所依赖的库文件(Library, ...原创 2018-11-27 18:10:42 · 1421 阅读 · 0 评论 -
Socket编程--使用Tcp实现简单的聊天程序
Socket编程--使用Tcp实现简单的聊天程序计算机网络基础知识使用Tcp协议的Socket编程在Android聊天程序的实现中,通常是通过http请求拉取最新聊天信息,由于http请求是无状态(Stateless)的,无法随时获知新消息的到达,通常采用推送的方式告知客户端有新的消息。除了这种http+推送的方式外,也可以通过Socket编程实现聊天程序。本文将对网络层次进行简单的讲解,并结...原创 2018-11-26 15:49:18 · 5341 阅读 · 1 评论 -
JNI Crash:异常定位与捕获处理
JNI Crash:异常定位与捕获处理方法一:ExceptionCheck机制方法二:信号量捕获机制基础知识一:信号量机制signal函数使用sigaction的使用基础知识二:Non-Local Exits利用上面的两个知识点通过信号量进行Android jni崩溃捕获和处理在Android JNI开发中,经常会遇到JNI崩溃的问题,尤其带代码量大,或者嵌入了第三方代码的情况下,很难进行问题...原创 2018-11-23 11:19:57 · 6422 阅读 · 2 评论