- 博客(38)
- 资源 (12)
- 问答 (1)
- 收藏
- 关注
原创 finish()和onDestroy()的关系
问题背景早上老铁跟我说,他们项目接入讯飞语音的时候重复进Activity导致了空指针异常,怀疑是第二次进入Activity的时候调用了onCreate()之后,上一次该Activity的onDestroy才开始调用,然后操作相同变量导致了这个crash;换句话来说就是调用了finish()方法之后延迟了很久(4-5s)才调用onDestroy(),然后5秒内再次打开该Activity导致崩溃,说...
2020-07-21 17:41:33
4935
原创 Android动态权限问题探究(并解决OPPO动态权限)
前言之前调研了动态权限的申请方法,可是国内rom千奇百怪,真正实施起来的时候却不见得那么顺利,以前我们在Application里面承载了太多了业务逻辑,其中包含了需要READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE权限的操作,所以这样的逻辑存在于Application里变得不合理,当然本来存放耗时逻辑在Application的onCreate里面就会影响APP启动速...
2019-02-19 19:41:07
9044
5
原创 Android 权限调研续集
前言晚上骑车回去的,想到了行者GPS开关的判定,遂想对位置权限做补充,续写一下位置权限的调研。目标申请位置权限的时候获取一下GPS开关是否开启,以应对要求精准定位的场景,在之前的demo上做扩展。实现因为要处理位置开关,所以,我们不得不封装一个BaseActivity,当然也完全可以将之前的权限申请方法写在BaseActivity里面,如果需要权限回执之后做相关操作,在相关Activit...
2018-09-30 11:41:08
274
原创 Android 权限调研
前言截止当前时间,Android版本已经到了O,Android 6.0引入动态权限机制,到目前随着Android 6.0以及以上版本普及,动态申请权限变得越来越重要,也是大多数APP的通用机制,目前我们的APP涉及到的权限也不少,为了得到更好的用户体验,应该在需要权限时,动态申请,还有需要在第一次被拒绝之后能够保证再次申请。动态申请权限列表目前危险等级的权限都需要动态申请,正常等级的权限不需...
2018-09-29 20:42:39
1123
原创 Flutter初探
初探跨平台开发的好处是一块代码多处运行,这样节约了开发成本也减少了bug的修复时间,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。Flutter是Google用以帮助开发者在Ios和Android两个平台开发高质量原生应用的全新移动UI框架,那他都有什么好处呢: 热重载(Hot Reload): Android Studio 修改代码保存一下就可以通过手...
2018-09-05 21:28:52
4425
原创 CEPH搭建错误处理
错误处理1, 对硬盘进行格式化: # mkfs.xfs /dev/sdb1, 系统显示: mkfs.xfs error: command not found.因为系统缺少xfs的部分包,安装解决: apt-get -y install xfsprogs2,安装集群时候,log显示:Reading package lists... Done E: Problem ...
2018-04-17 18:08:21
6132
1
原创 CEPH环境搭建与Swift调用
前言Ceph 是一个高性能、可靠、可扩展的开源存储平台。它是一个自由的分布式存储系统,提供了对象、块和文件级存储的接口,并可以不受单点故障的影响而运行。上周调研了CEPH文件集群的优劣性,准备做一个实际搭建的性能测试,在物理机上虚了多个ubuntu出来,模拟多台物理机集群,参考网络资源,搭建起来的,但是有遇到一些错误,可能对于接触过linux的人来说都不算很严重的难题,这里做个记录。本文参考:...
2018-04-17 18:06:55
2195
原创 CEPH分布式集群调研
简介Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它通过C++编写并提供python、C、C++、java、php调用,它可靠性高、管理简便、并且开源,可以进行二次开发。Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数...
2018-03-29 16:00:06
1063
原创 Taobao FIle System 编译和使用
前言最近android项目里要用到小文件存储集群,老大决定调研一下各个集群文件存储系统是否能完成相关的工作,之前我测试了一下mongoDb存储视频文件(4MB),在局域网里速度应该是秒级的,不过mongo是文档型的数据库,并不太适合做视频存储,做笔记的目的是想记录一下编译TFS的过程,因为这方面网上的教程较少,可能TFS停止更新好长时间了。编译编译前确定编译环境是linux 64位...
2018-03-20 15:02:26
1523
原创 Imageloader图片错位解决方法
引入问题最近的工作又用到了Imageloader,之前修改过源码以便于imageloader能够接受加密和解密的图片数据显示,最近在写历史数据界面的时候,发现RecyclerView里面item公用ImageView显示本地和网络图片相间的时候,滑动过快导致图片异步加载出现之后错位的情况。分析问题并确定问题出现了这个问题有三种导致这个的情况: 1,RecyclerView的ite
2018-02-02 17:11:39
1375
原创 适配器模式(三种)简单使用
前言适配器模式是将一个类的接口转换成客户希望的另外一个接口,身边很多东西都是适用于适配器模式的,笔记本的电源(也叫电源适配器),是将220V的交流电转换为笔记本电脑所需要的12V(电流先忽略),笔记本电脑的各种接口,VGA转Hdml,USB-TypeA 转 USB-TypeC,亦或者你在香港买了个手机,充电器是你生活中没见过的三孔插座通过一个转换头转换为国内常用的插头,很多例子都能很形象的解释
2018-01-25 18:03:00
33970
12
原创 桥接模式简单使用
前言桥接模式也称为桥梁模式,属于结构型设计模式。名如其名,桥梁模式就是连接没有关系的两个地,起到连接两边的作用,换点技术性语言,桥接模式就是将抽象部分和实现部分分离,使它们都可以独立进行变化,这个桥梁也就是连接抽象和实现部分了。适用任何多维变化类,亦或是多个树状类之间的耦合都可以用桥接模式来解耦。UML角色ABStraction:抽象部分,该类保持一个对实现部分的引用,
2018-01-22 18:11:57
747
原创 外观模式的简单使用
前言外观模式的目的是隐藏复杂的内部逻辑,让客户端只需要调对外的统一接口,隐藏了系统的复杂性,这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。使用场景1、当你要为一个复杂子系统提供一个简单接口时。 2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以
2018-01-19 17:38:54
279
原创 享元模式的简单使用
前言享元模式是一种软件设计模式,是对象池的一种实现,其目的在于尽可能的减少内存的使用量,内存属于稀缺资源,如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存,不必每个都去实例化对象,从而节省内存,其实现共享的关键在于区分内部和外部状态,内部可共享,外部不可共享,从而实现高效重用。角色扮演FlyWeight: 抽象享元类,可以使一个接口也可以是抽
2018-01-18 18:30:29
1269
1
原创 组合模式的简单使用
前言组合模式也称为整体部分模式,其结构比较简单,类似于组织结构的树状图,就像我所在的公司,属于集团下面的子公司,集团包括行政部门和财务,而我们公司也有这样两个部门,更加形象的说,组合模式最容易理解的是电脑的磁盘文件夹,文件夹里面可以有各类文件,也还可以有子文件夹,而子文件夹里面也同样可以有这些东西。关于定义则套用百度百科:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使
2018-01-09 23:29:25
383
原创 装饰模式简单使用
前言装饰模式又叫包装模式,字如其意,就是把一个事物包装起来,增加一些修饰物,动态的给一个对象添加一些额外的指责,这和继承有异曲同工的意思,对于增加一些功能来说,装饰模式比写子类来的爽快,这样说来平时随手都是装饰模式,随便来段代码: @Override public void onActivityCreated(@Nullable Bundle savedInstance
2018-01-03 18:04:32
421
原创 中介者的简单使用
前言中介者模式又叫调解者模式,属于行为类模式,其意义在于封装一系列对象操作,使原本需要相互显式调用的各个对象不再需要直接显式调用,而是通过中间对象来做这个事情;这样就会将原本的网状结构变成了星型结构,各个对象只需要去对这个中间者交互,这样做就变得简单了。适用场景当对象之间的交互多而杂,相互依赖彼此,那么自然而然在后续修改中要跟着改所有的依赖,这样代码的扩展性就差了点,中介者模式完全适合,其解决了该场
2017-12-27 13:05:00
240
原创 访问者模式简单使用
“访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方法。”我觉得这个解释非常好,我们使用观察者模式的用意就是完成这个目的,以至于添加一个统一的接口accept,来接受一个访问者对象,怎么做到区别对待呢,那就是通过Visitor的不同来处理不同的操作,再怎么解释也不如甩个demo。适用模式要用这个模式,其对象必须要结构稳定,当然子类可以增加属性;另一方面如果使用对象不
2017-12-26 22:38:16
1039
原创 模板模式的简单使用
前言定义一个操作的算法步骤,固化一个算法流程,子类按着自己的需求复写父类的部分方法,使得子类可以不改变固化的算法步骤,即可重新定义该过程的特定步骤。这个最熟悉的应该是Activity的生命周期,当然各种组件的生命周期都是模板模式的,这个就很容易理解了。适用对象1,多个过程逻辑基本相同。 2,重复的算法,可以提取核心作为模板,子类各抒己见。 3,很多时候我们要简化Activity或者其他类的逻辑,
2017-12-26 22:34:54
222
原创 迭代器模式的简单模式
前言迭代器模式又叫游标模式,是一种行为型模式,我们常常用到的Sqlite的数据库查询就用到了这种模式,更多时候我们用的多的或许是java的Iterator类,来遍历数据;而迭代器模式提供顺序遍历对象各个元素,又不暴露对象的内部表示。适用模式1,访问一个对象的内容而无需暴露它的内部表示; 2,遍历容器对象; 3,为遍历不同的结构提供一个统一的接口。角色扮演Iterator:迭代器接口,负责定义、访
2017-12-26 22:31:56
223
原创 备忘录模式的简单使用
前言备忘录模式是一种行为模式,用于存储对象的当前状态,这个在Android开发中最常见的事Activity的恢复onSaveInstanceState方法,存储当前activity的状态,对于备忘录模式的定义,百度百科解释如下:备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。适用模式1,我们要保存对象的
2017-12-26 00:00:41
286
原创 观察者模式的简单使用
前言我们在Android ListView或者Recyclerview的开发中,常常是数据更新之后要立刻去更新界面,这种Adapter的notifyDateSetChanged就运用了观察者模式;观察者模式是一种使用率非常高的模式,常常用到GUI之类的的系统中,界面跟随数据发生改变,使得UI和具体的页面逻辑分开解耦,换而言之,观察者模式就是一对多的关系,一个对象发生改变,其依赖于它的所有对象都收到通
2017-12-25 21:52:06
371
原创 命令模式的简单使用
前言命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,从而解耦的执行相关的操作。命令模式也叫行动模式或者交易模式;使用命令模式的优点就是在新加入命令的时候很容易扩展,而且如果要存储命令执行顺序也很容易维护一个这样的队列,很容易实现命令的撤销与恢复,大多数优点都基于维护一个队列。角色扮演Receiver:具体执行请求操作类,其具体方法叫行动方法。 Command:声明了一个命令
2017-12-23 16:53:45
627
原创 解释器模式的简单使用
前言解释器模式使用频率比较少,顾名思义解释器模式就是给定一个语言,定义它的语法,然后解释器根据协议来解释这个语言,得到结果。类似于翻译吧。我觉得用的最多的就是计算表达式了:“A+B”,解释器就是按着操作符区分变量和运算符,然后得到A+B的结果。适用模式某个语言需要解析执行,比如解析XML之类的,可以用到解释器模式。再者如果特定场景不断重复这个场景,可以提取语法,抽象出解释其模式。角色扮演Abstra
2017-12-20 11:11:31
1103
原创 责任链模式的简单使用
前言责任链模式自如其名,就是谁的责任谁来处理这个问题,但是对于这件问题只有一个请求入口,逐个传递达到结束请求的目的。其结构很像生活中的铁链,由一个个小的椭圆形的圆环相连,将每一个圆环看做一个对象,每一个对象都拥有不同的处理逻辑,首端发出请求,这些对象就会按需求来看谁满足处理这个请求的能力,沿着这个链结构逐个传递,最终解决问题。如果还不形象,我就举一个例子,你找领导报销10000元出差补助,你找了你的
2017-12-18 22:52:10
525
原创 状态模式的简单使用
前言状态模式简而言之就是指我要做一件事,这件事能导致什么后果我不管,由当前状态来决定,比如我有两块钱,我想吃点东西就去了商店,结果怎么样得看这个商店有两块钱的什么东西,如果商品都大于两块,我还不能吃到食物了;这就和策略模式特别像了,他们的结构完全一样,状态模式的行为是由状态来决定,行为是平行的不可替换的,而策略模式的行为是可替换的,因为它都是为了完成同一个行为。
2017-12-18 20:51:45
1143
2
原创 策略模式的简单使用
前言最近上班基本都没写java(Android)代码了,这段时间被系统研发部借去开发PHP网站,下班回家抽点时间可以整理一下关于java的设计模式,当然这也适用于Android。今天要整理的事策略模式。在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能;很常见的就是排序算法,我们完成一个排序可以通过很多算法,但是到头来
2017-12-17 16:34:09
284
原创 抽象工厂模式简单使用
前言工厂方法模式指定了抽象了产品的功能,等待具体产品去实现该功能,而工厂方法不管产品的任何实现,只需要按需返回指定产品类;但是当工厂类生产的产品差别很大的时候,要对每一个产品区别化时,我们需要去更改具体的Product类的方法,比如汽车的例子,我们两个车的引擎不一样,那么我们就要去改Product类里面的Engine的具体实现,这种情况下,抽象工厂模式就更适合。抽象工厂模式可以对产品的零部件做一个基
2017-12-17 15:08:18
357
原创 工厂方法模式的简单使用
前言工厂模式是java中使用特别广泛的一种设计模式,如过对象很复杂或者多个对象拥有一些共同的特性,比如数据存储,可以使txt,也可以是sql数据库,或者说是xml文件,当然Android还提供了preferences,都是存储文件那么方法的作用就会大同小异,这种情况下就很容易想到工厂模式。
2017-12-14 20:39:13
248
原创 原型模型的简单使用
前言原型模型的使用在Android里最大的体现是Intent,通过看源码不难发现,intent传值进去之后在startActivity之前会clone一份Intent,说回来原型模式其实就牵扯到拷贝问题,换一句话,预防对象被意外改动使用拷贝就是原型模式。使用场景1.类初始化操作复杂,牵扯到太多资源的。 2.一个对象需要提供给其他对象访问,那各个调用它的对象都可能更改它的值,但是更改的值只对该对象使
2017-12-14 20:02:45
1556
原创 Builder模式的简单实现
前言Builder模式是将对象的构建和表示分离,好比构建一辆汽车,Builder是将部件和组装过程分离,从而达到高内聚低耦合的目的。使用场景1.相同的方法,结果和执行顺序有关。 2.多个部件都可以组装到一个对象中,但是结果和这个部件有关。 3.产品非常复杂,或者初始化对象非常复杂(参数太多)。简单的代码实现Build分为Products产品类(产品的抽象类)、Builder类(规范产品的组建,但
2017-12-14 09:42:47
385
原创 单例模式的几种实现
前言不管是学习什么语言,都会用到设计模式,那么Android也一样,只不过Android说回来其实就是Java,我想借用一些课余的时间,整理一下Android的设计模式。首当其冲的就是单例模式,这个在开发中使用最广泛了。单例模式的几种实现在Android源码中有很多使用了单例模式,比如WindowsManagerService、ActivityManagerService等系统级别
2017-12-13 18:17:28
324
原创 Android Kotlin入门(RecyclerView的使用)
前言作为Android开发,很有必要了解一下系统新特性,也很有必要了解一下新的开发语言(Kotlin),借着昨天晚上的时间入入门,今天中午记录一下。就不以helloword入门了,我们写一个Recyclerview列表吧。开干Android Studio 升级到3.0,自带kotlin功能,新建项目也完全一样,以前创建MainActivity.java 现在创建kotlin文件,创建一个kt文件,继
2017-12-07 13:40:45
1489
原创 快速入门PHP(环境、debug、开发)
前言作为一名Android工程师,有时候也要接触一下传说中世界上最好的语言,11月中旬老板说想做一个网站,就接触了php这门最好的语言,而且要快速开发,到12月初网页功能基本已经完成,所以记录一下,说不定以后有用呢,以前都没有记录的习惯,比如才入职的时候编译的PJSIP,现在要编译又得看看去了,所以好记性不如烂笔头。入门(开发环境与debug环境)以安装环境入门吧,PHPStorm + Wampse
2017-12-06 16:48:21
2610
原创 linux下jar包的生存与开机自动启动
前言 作为一名Android开发,有的时候也是要做做其他工作的,前段时间写了一个很简单的java消息转发程序,因为和三方厂商合作,对方只提供了java的sdk,然而我们这边都是清一色的C#后台开发人员,所以我就起到桥梁的作用了,总结一下简单的工作,以后回望或许有所感想。程序方面 怎么提供消息给C#程序员呢?那当然是RabbitMQ,这个相对简单,也贴一下,万一以后会用到MQ呢? /
2017-12-04 13:07:33
11254
1
原创 ImageLoader加密解密共存
ImageLoader加密解密共存问题提出 Android开发中异步图片显示应用特别广泛,我们常常会用到imageloader、Glide、picasso或者其他开源框架,各有好处,我们这边开发中经常使用的是imageloader,但是在最近的项目开发中,我们图片的URL是加密的二进制流,出于项目的需要,我们需要对加密流进行解密。一个简单的解决方法 出于快速开发的想法,想寻找一个特别简单的能
2017-12-04 11:01:15
269
原创 用android仿写一个可视化语音信箱界面且保证点击item动画展开可以完全显示
ios 9.2 之后推出了可视化VoiceMail,从开发的角度看问题,发现点击voiceMail 的某一条item的时候,item展开了,并且背景虚化变灰,那么心里面想,如果用android的RecyclerView来做这个界面,点击item之后展开倒不是一个问题,问题在点击之后怎么触发背景变灰而当前item颜色正常呢?这便是我这边博客要解决的问题,这是我第一次写博客,作为一名毕业不到一年的开发
2017-04-05 15:34:56
719
1
原创 自定义ScrollView嵌套Pageview和GridView(ListView)的相关问题
问题一: 返回该界面,页面不在页首。 解决办法: gridView.setFocusable(false); //对Gridview设置(listview) scrollView.smoothScrollTo(0,20); //显示页首问题二:
2015-11-17 17:43:40
1476
Java wrapper Service 在linux下配置java消息转发后台的疑问
2017-07-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人