自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

努力才有可能得到!

博主github开源地址:https://github.com/devyok

  • 博客(35)
  • 资源 (3)
  • 收藏
  • 关注

原创 大型移动应用解决之道 - 组件化

在插件化那篇文件中,我们介绍了插件化解决了很多痛点问题,很完美的方案,不管是研发还是产品都爱不释手,但是插件化的实现并不是这么容易就能应用到产品中,还是要折腾折腾的,其次还要看团队中有没有大神级人物能hold住。

2018-01-24 10:01:36 670

原创 大型移动应用解决之道 - 前言

大型移动应用解决之道 - 前言大型移动应用解决之道 - 多进程大型移动应用解决之道 - 插件化大型移动应用解决之道 - 组件化大型移动应用解决之道 - 动态化大型移动应用解决之道 - 业务框架化大型移动应用解决之道 - 升级精准化大型移动应用解决之道 - 测试自动化大型移动应用解决之道 - 代码检查自动化大型移动应用解决之道 - 依赖管理大型移动应用解决之道 - 发布自动化下图列出了各个方案所解决

2018-01-24 09:54:05 710

原创 大型移动应用解决之道 - 依赖管理

如果我们足够细化架构,那么必然会有通用的组件或模块被提取出来,通常每个通用组件或模块都有专门的团队来负责开发维护,既然是通用的,那么其他功能模块的研发团队都需要依赖他们来做事情,而依赖的方式大概有以下两种

2018-01-23 17:42:21 647

原创 大型移动应用解决之道 - 插件化

插件化这个词相信读者并不陌生,比如,我们的IDE(eclipse,As等)都具有支持插件的能力,如果了解Windows开发的读者对DLL这种机制也并不陌生,包括一些Web应用服务器(jboss等),他们也都实现了osgi的模块化的规范,可以实现类似插件的功能,在无需停止服务器的前提下就可以上线一些需求或动态的替换组件和模块的实现等。 但是在Android系统中是不支持这种开发模式,需要我们的开

2018-01-12 15:57:58 1413

原创 大型移动应用解决之道 - 多进程化

面临的问题?随着业务部门在移动平台的需求量越来越多,功能需求在单向递增,N个功能模块在同一个进程中去争抢内存,如果使用不当,会带来很多稳定性的问题(卡,慢,崩)。功能需求增多之后,将会带来以下问题:1. 最直观看到的便是应用的体积变大,即DEX文件变大,当被映射到内存时,这部分内存很难被卸载回收。2. 每个应用的内存大小是有限制的,应用并不是无限制的申请内存,系统也设有临界值,如果

2018-01-12 15:57:09 622

转载 iOS开发 - 3个经常被忽略的iOS编码规范

对于编程开发来说,编码规范是不可或缺的一个环节。在iOS开发领域,苹果也有官方的编码规范文档:《Coding Guidelines for Cocoa》。尽管对官方的这些权威指南,每一个iOS开发人员都应当去遵守,但在不少视频教程、文章、示例代码中,依然经常可以看到违反编码规范基本原则的情况。本文将列出3个经常被忽略的规范原则,希望大家在日常的开发中能留意纠正。

2018-01-22 12:51:12 531

转载 iOS开发 - WebView的Hybrid框架设计

前言随着移动互联网的发展,APP 开发模式也在不断的创新,从最初的 Native 开发到后来的 Hybrid 混合开发,再到最近比较火爆的 React Native、Weex 等项目,这些都标志着 APP 开发已经不再是纯 Native 的工作,还要涉及很多跨平台的技术。

2018-01-22 09:35:18 952

转载 kotlin 视频教程

kotlin视频教程

2018-01-18 10:22:28 3384

转载 Android混淆最佳实践

综述毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。首先,这里说的的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。依靠 ProGuard,混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的瓶颈;同时,将类、类成员、方法重命名为无意义的简短名称,增加了逆向工程的难度。而依靠 Gradle 的 An

2018-01-18 10:10:55 521

原创 iOS开发 - 通过cocoapods管理框架

首先查找下框架,是否能够正确安装pod search 框架名称从列表中中选择你用使用的版本首先在新建的工程目录下,添加Podfile文件,然后编辑文件内容platform :ios, '8.0'target 'cocoapods-test' do pod 'Masonry','~>1.1.0'end完成编辑之后,打开terminal,在工程根目录下,输入pod

2018-01-13 17:17:11 323

原创 iOS开发 - cocoapods安装失败

在安装cocoapods时提示:YAML safe loading is not available.Please upgrade psych to version that supports safe loading(>=2.0)查看本机支持的镜像gem sources -l如果没有(http://gems.ruby-china.org/),没有的话,先删除其他的;

2018-01-13 16:40:42 6168 1

原创 Replugin与DroidPlugin框架比较

进入这篇文章阅读的读者,相信对这两个框架都有了一些了解,这篇文章主要是笔者对这两个框架的技术实现不同的地方进行的一个总结,希望能帮助读者理解这两个框架。 Replugin与DroidPlugin共同面临的问题 1. 插件中的组件(Activity等)启动的问题?2. 插件中的Class如何加载?3. 插件中组件的Context如何与插件的资源绑定? 下面举例中,都以

2018-01-12 15:55:45 4516

原创 Dvm的进程和Linux的进程

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,每个android程序系统都会给他分配一个单独的liunx uid(user id),每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.

2016-05-30 21:59:26 2102

原创 Android 恢复出厂设置(系统时间不修改)

Android恢复出厂设置时,只会将/data和/cache分区进行清除,时间和其他分区不会清除,时间由rtc硬件模块来进行维护的,时间更新后会将时间信息写入此硬件模块,在系统启动时,RTC硬件驱动会读取此值进行设置。

2016-05-30 21:54:43 3105

转载 TCP延迟确认

简介TCP延迟确认是由一些实现采用的技术,努力提高网络性能的传输控制协议 。从本质上讲,几个应答响应可能结合在一起,成一个响应,减少协议开销 。然而,在某些情况下,该技术可以降低应用程序的性能。方法和优势RFC 1122中描述,主机可能延迟发送ACK响应到500毫秒。此外,收到一个完整大小的TCP报文段,就要发送ACK响应 。延迟ACK可以给应用程序的机会,一起发送更新的TCP

2016-05-29 21:53:58 2794

原创 Sqlite3 锁升级机制

SQL使用锁逐步提升机制,上面的表格从上到下,对应锁的等级逐步提升,等级越高权限就越大。未加锁:未和数据库建立连接、已建立连接但是还没访问数据库、已用BEGIN开始了一个事务但未开始读写数据库,处于这些情形时是未加锁状态。共享锁(又称:读锁)连接需要从数据库中读取数据时,需要申请获得一个共享锁,如果获得成功,则进入共享状态。预留:(预定一个锁,此时先写入缓冲区)连接需要写数

2016-05-26 21:15:36 1417

原创 Dialog中IME获取不到keyevent的原因

结论:使用默认的弹出dialog 的方法,IME是获取不到keyevent事件的,只有自己定义的dialog,也就是在dialog show之前调用setView,那么ime就可以获取到keyevent了。为什么在dilaog show出来的时候,IME获取不到keyevent事件,是由于当在没有setView时,AlertController中的成员变量mView为null,当在show的时

2016-05-26 21:06:57 946

原创 Android PendingIntent

Pending : 待定PendingIntent 和 Intent 的区别: 使用Intent启动的activity或者service,只要这个activityfinish或者service stop 那么这个intent也就销毁了,但是PendingIntent不是这样,他是在AMS里面有由一个PendingIntentRecord的管理,即便broadcast执行完之后,这个PendIn

2016-05-26 20:58:26 932

原创 FLAG_EXCLUDE_STOPPED_PACKAGES与FLAG_INCLUDE_STOPPED_PACKAGES

Android在4.0之后,如果已经安装的APP,在从未启动过时,通过广播是无法唤醒APP的,但是Service是没有,Service是依然可以唤醒的。 经过看源码, 在AMS发送广播的时候,添加了一个FLAG =FLAG_EXCLUDE_STOPPED_PACKAGES,所以忽略了从未启动过的APP,所以通过广播就不能唤醒,如果需要唤醒需要添加FLAG=FLAG_INCLUDE_STOPPE

2016-05-25 22:22:35 3795 2

原创 AsyncTask出现RejectExcetionExcetion原因

在项目中使用AsyncTask过程中,出现过RejectExcetionExcetion这个异常,经过查看源码,发现在构造ThreadPoolExecutor时,ThreadPoolExecutor内部默认的RejectedExecutionHandler是AbortPolicy来实现的,AbortPolicy见名知义就是中断执行的策略既是抛出RuntimeException。在ThreadPoo

2016-05-25 22:06:05 1782

转载 软件架构设计-五视图方法论

1.每个人都可以做成为架构设计师不懂软件的和刚入行的人们一听到架构设计,都认为是非常的高大上课题,是一个遥不可及的领域,一般人是不能做的。听起来云里雾里的,第一印象除了来自微软,阿里这些NB的公司里面的人其余的都不能做出架构似的,这是一种先入为主的思想,因为大家都在强调架构师的重要性,他的薪资有多么的高,在整个社会对他的认定导致很多人对架构设计望而生畏。放正自己的心态其实架构设

2016-05-24 13:19:04 14948

转载 Android微信智能心跳方案

前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援。刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析。我和春哥抓包测试了差不多两个多礼拜,在我们基本上摸清了Line和WhatsApp的心跳机制后,Ray才告诉我们真正的任务——对微信的固定心跳进行优化,并告诉我们这不是一件容易的事情。于是我和春哥开始构思第一个方案,我们开始想用统计的方

2016-05-24 13:13:59 3055

转载 RESTFUL API 安全设计

0x01 REST API 简介REST的全称是REpresentational State Transfer,表示表述性无状态传输,无需session,所以每次请求都得带上身份认证信息。rest是基于http协议的,也是无状态的。只是一种架构方式,所以它的安全特性都需我们自己实现,没有现成的。建议所有的请求都通过https协议发送。RESTful web services 概念的核心就是

2016-05-24 13:07:08 12107

原创 Android 培训课程V1.0

大概课程Android APP架构设计...1Android 领域驱动设计...1Android 基于插件式设计...2Android 设计模式...2UML设计工具Enterprise Architect.2Android 组件...2Android IPC.2View KeyEvent和MonitorEvent.2View 构

2016-05-24 09:17:23 805

原创 减小终端与基站建立空口连接导致传输时延

公司自研Android终端(基于展讯平台),需要在按下物理按键时向服务器发送UDP包做业务,但是,QA经过大量的测试在网络状态相对较好的情况下,依然会存在业务延迟的情况后面经过和展讯MODEM工程师沟通,这种情况终端MODEM处于休眠状态下,终端首次向基站请求上行传输资源时,终端需要先向基站申请上行调度请求,基站才能分配资源让终端进行上行数据传输。那么如何能让基站能够尽快的分配资源给终端。

2016-05-23 14:26:09 2135

原创 当焦点在SearchView中时,输入法不能处理KEYCODE_BACK按键的原因

公司自主研发的终端产品形态是带有物理按键的T9数字键盘的,终端需要可以通过键盘来输入字符(中文、英文、数字等),当然同时也是可以删除的。软件中的某个模块,使用了SearchView这个控件,当输入字符之后,用户可以通过back按键删除字符,但是在实现的过程中发现输入法不能获取KEYCODE_BACK按键。翻了下SearchView的源码,发现SearchView$SearchAutoCom

2016-05-23 13:25:41 2380

原创 Android 进程间通信之LocalSocket

我们知道在Android上和网络的服务器通信手段有很多种, 通常我们的业务数据承载应用层协议(http等)或传输层协议上(tcp/udp)进行交互。 那么在传输层的Android上的技术接口无非就是socket,socket就是一套接口,可以使用网络,文件或内存来做为媒介进行通信,但是在android中都可以使用namespace来选择使用哪种方式进行通信。

2016-05-22 23:16:44 8823 1

原创 Android APP存活检测

稍微深入了解过Android的开发者都知道,Android中每个APP的中的所有组件的生命周期状态都是由ActivityManagerService(简称:AMS)进程来维护的,所以当某个APP被kill或意外crash时,AMS进程会第一时间维护APP的组件。  我们今天不会看AMS进程维护APP的流程,只看AMS是通过什么手段第一时间得到的通知,我们是否能够将这种手段应用到我们的APP中,在多

2016-05-22 17:03:43 4639

原创 Android InsertHelper解决插入速度慢的问题

最近在项目中需要解决数据入库慢的问题,业务场景是:从服务器获取到数据后解析完成后,需要将数据入库,由于数据量比较大,并且在每次入库时需要判断当前库中是否存在此条数据,如果存在则不入库,否则入库。 其中一位开发人员将业务实现后,量小时勉强可以使用,当量大时,至少需要长达几分钟的时候。 经过分析后,发现在实现这个需求时发了过多的查询SQL(存在入库,不存在则不入库),同时没有使用SQLiteState

2016-01-28 19:02:02 1622

原创 Android Barrier

为了让View能够有快速的布局和绘制,android中定义了一个Barrier的概念,当View在绘制和布局时会向Looper中添加了Barrier(监控器),这样后续的消息队列中的同步的消息将不会被执行,以免会影响到UI绘制,但是只有异步消息才能被执行。 所谓的异步消息也只是体现在这,添加了Barrier后,消息还可以继续被执行,不会被推迟运行。 如何使用异步消息,只有在创建Handler(构造

2016-01-28 18:38:22 5416

原创 Android使用SQLITE3 WAL模式

在sqlite3.7版本之后就支持write ahead logging(WAL)模式,开启WAL模式可以提高写入数据库的速度,读和写之间不会阻塞,但是写与写之间依然是阻塞的,但是如果使用默认的TRUNCATE模式,当写入数据时会阻塞android中其他线程或者进程的读操作,并发降低。 相反,使用WAL可以提高并发。 由于使用WAL比ROLLBACK JOURNAL的模式减少了写的I/O,所以写入

2013-08-01 22:49:44 12175 1

原创 Android事务 IMMEDIATE与EXCLUSIVE模式

Transaction是数据库保证数据唯一性和一致性的技术,对于数据库一个或一组写操作要保证是一个原子操作,要么写成功,要不成功就需要使用Transaction,android使用事务的常见形式如下:SQLiteDatabase db = null;... db.beginTransaction();try { db.setTransactionSuccessful();

2013-07-31 21:41:58 5657

原创 Android 内存数据库

在android中数据库通常以文件的形式存储在磁盘中,而内存数据库是将数据驻留在内存中,因此可以作为一种缓存技术方案。 那么在android如何使用sqlite的内存数据库呢?看SQLiteDatabase的源码:/** * Create a memory backed SQLite database. Its contents will be destroyed *

2013-07-31 20:44:57 5356 2

原创 Android Framework ActivityManagerService(1)

ActivityManagerService(简称:AMS)管理着应用程序中所创建的所有组件(Activity、Service等),每个组件的信息与组件对应的进程信息都在管理范围内,包括内存释放潜规则。为了实现组件的管理,每个组件的状态变化过程都需要通知AMS,组件间的跨进程通信(IPC)也由AMS来搭建。 所以AMS相当重要,在源码中随处可以。先看下AMS静态类结构图:

2013-07-26 20:29:47 1793

原创 android中非aidl实现进程间通信(编写顺序的parcel写入与读出)

android开发人员对IBinder总是有一种神秘感,

2013-07-24 22:51:59 1630 2

锁王_V1.0.01.apk

android app安全,保护app,保护隐私,保护资料

2016-02-05

在android将pdf转成生图片

在android中将pdf的每页转成图片

2013-08-05

android进程间通信测试代码

在android中实现非aidl进程间通信(编写顺序的parcel写入与读出)

2013-07-24

空空如也

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

TA关注的人

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