App develop note

To Be Powerful

Android Architecture Componets

2017 google I/O 开发者大会发布了android o,并确认了支持Kotlin。后来看官方网站,发现发布了一个新的App架构:Android Architecture Componets。 看了一下官方文档,这个架构组件其实就是将mvvm模式继续细化。架构图: View层:acitivty/fragment ViewModel:用来和View和model层交互,与之前...

[Design]旅行行程


BackPressure

最近更新了RxJava2,看到了新增的Flowable支持背压。什么是背压呢? 背压(BackPressure)是一个比较抽象的概念,背压是“流控”的一种实现方案。 流控 流控就是控制流量,例如当服务端能处理的请求数量少于当时接受的请求数量的时候,就需要流控。 常用的流控实现方案有4种: 背压(BackPressure) 节流(Throttling) 打包 阻塞 ...

TDD,BDD,DDD

TDD Test-driven development,即测试驱动开发。一种开发过程中应用方法。其思想为先根据需求抽象接口,先编写测试用例,然后在开始编写开发代码。TDD的本意就是通过测试来推动整个开发的进行。 TDD说白了就是先写一小段功能的测试代码,测试失败后再写实现代码,测试成功后接着迭代下一个功能。 TDD的优点: 提高功能的可测性 测试比较灵活 测试用例覆盖率...

TensorFlow安装

在Mac上安装TensorFlow有以下种方式: virtualenv Pip “native” Docker 从源码安装 Anaconda 其中 virtualenv和Anaconda其实都是使用Pip来下载安装的。 从源码安装 由于Windows上无法编译Tensorflow,所以暂时无法在Windows上通过源码安装 1.clone源码 git c...

ReactNative Flux

react-native-router-flux 是React Native的一个基于Navigation API 的一个路由组件。 功能: 集中定义routers和scene 集成navigator,无需再在页面之间传递navigator 可以在任何地方简单方便地调用场景切换,如跳转到登录页面:Actions.login({username, password} 特点...

ReactNative Navigator

NavigatorIOS NavigatorIOS是IOS中UINavigationController的包装,功能基本和UINavigationController一致。 使用 <NavigatorIOS initialRoute={ { component:MyScene, title:'My Initial ...

上传android类库到JitPack

关于JitPack 关于JitPack是一个自定义的开源Maven仓库,方便开发人员在AndroidStudio中使用开源的第三方类库。 使用AndroidStudio的应该都知道Maven Central和jCenter,这两个平台和JitPack的功能一样,不用在这两个平台上传发布开源类库的过程比较复杂,需要好多步骤,估计将来逐步会被淘汰。JitPack相对于这两个仓库来说就简单省时间...

持续集成和交付-Flow.ci

什么是持续集成和持续交付? 持续集成 持续集成就是频繁地将代码集成到主干。持续集成的好处: 快速发现错误 防止分支大幅偏离主干 持续集成的目的就是快速产品迭代,同时保证质量。 持续集成的核心措施就是代码合并到主分支之前,必须经过自动化测试。 持续集成并不能消除或大量减少BUG,而是让BUG更容易发现和改正。 持续交付(Continuous delivery) 持续交付...

LoadingView

android Loading view animation demo: Usage: layout: <com.dx.dxloadingview.DxLoadingView android:id="@+id/loading_view" android:layout_width="wrap_content" android:layou...

LoadingButton

android button视图动态转换为加载动画,并显示动画显示请求的结果(成功或失败)。 demo: Usage: layout: <com.dx.dxloadingbutton.widget.LoadingButton android:id="@+id/loading_btn" android:layout_gravity="center...

模仿锤子阅读的下拉刷新

模仿锤子阅读的下拉刷新效果 Demo: Usage: //oc _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; DxRefreshView *refreshHeader = [[DxRefreshView alloc] init]; refreshHeader.color = [UIColor...

Vux

Vux是基于WeUI和Vue开发的移动端UI组件库,主要面向微信公众账号页面。并提供了一些常用的工具。 安装 使用 Vue-cli 和 airyland/vux2 可以快速初始化项目。 #使用npm全局安装vue-cli npm install --global vue-cli #创建一个基于 webpack 模板的项目,xxx为项目名称 vue init airyland/vux2...

Vue

#Vue Vue是这两年比较火的H5轻量式框架,提供了MVVM数据绑定,它简单,灵活,易用,也容易上手,所以才会受到很多前端开发者的青睐. 安装 推荐使用 Vue-cli 安装,简单快捷。 #使用npm全局安装vue-cli npm install --global vue-cli #创建一个基于 webpack 模板的项目,xxx为项目名称 vue init webpack xx...

Android DataBinding Demo

早就看到Google出了一个MVVM的框架,找个机会上手了下,发现用起来没那么复杂,所以就写了一个简单的Demo。 这个Demo的内容很简单,就是获取github的repo列表,点击repo列表某项的时候跳转到对应的项目页面(HTML)。 使用到的第三方类库有: · RxJava · RxAndroid · Retrofit · RxBus ViewModel MainVi...

Android DataBinding

Android DataBinding 是google在android上对MVVM设计模式的一个实现框架,目前还在测试阶段,稳定性,性能和兼容性还存在一些问题,所以目前在稳定版本的App上应用的还很少。 Android DataBinding主要实现了View和ViewModel的双向绑定,包括用户的响应。并且实现了自动更新。 Android DataBinding是一个support ...

IOS组件化的思考

如果app的业务模块比较多,开发人员再多的话,开发一个中大量的IOS App确实比较麻烦和繁琐,也不利于测试。 组件化实现要解决的问题: 中间件: 1.组件之间要相互独立 2.中间件要能传递普通和复杂(无法通过URL传递)数据 3.能够通过url启动相应的controller,并能定制跳转方式 4.url的注册须用代码或静态配置完成,须去中性化 组件服务(service): ...

Android Small

关于Small Small是2015年底新出来的一个插件化App开发方案,适用于将一个APK拆分为多个公共库插件、业务模块插件的场景。 Small的实现方式: . Small的gradle插件生成的是.so包,在初始化的时候会通过.so文件生成zip文件,在由zip文件生成Dex,反射添加到宿主类加载器的dexPathList里面 . 资源文件处理:Small插件的资源是可以共享的,...

Android插件化实现原理

最近android插件化比较火热,陆陆续续出了好多插件化方案,大有百花齐放之势。 其实android实现方式就两种,要么hook AMS(ActivityManagerService),要么hook Instrumentation。想要详细了解hook的原理,先要弄清楚Activity的启动流程 Activity启动流程 启动一个activity: Intent intent = n...

Android Espresso

Espresso 是Android官方提供的一个UI测试框架,适合应用中的功能性 UI 测试。用于测试应用中的用户流,适合用来白盒自动化测试。支持android2.3.4(API 10)及以上版本。 Espresso 是基于instrumentation api,在AndroidJUnitRunner上运行。 配置环境 在module的build.gradle文件中添加依赖 depe...

Android&IOS自动打包上传到蒲公英

使用python调用系统的打包命令,打包完成之后将应用包通过curl上传到蒲公英。 python调用系统命令: import os import sys project_path = "..." //查看版本状态 os.system('cd %s;git status' % project_path) //拉取代码 os.system('cd %s;git pull' % projec...

MVP与MVVM

MVP和MVVM都是从MVC设计模式演变而来的,基本逻辑比较一致.view负责显示,model负责存储数据,其他负责逻辑处理。 MVP MVP即Model-View-Presenter。Presenter负责逻辑处理。 在MVC设计模式中view是直接可以访问model的,因此View中包含Model的信息和一些业务逻辑处理。在android 和 IOS开发中 Activity/U...

Background Image(Material design)

####Material design 风格的图片,可以用作App页面头部的背景

LoadingStateView

####android LoadingStateView,显示加载,加载成功,失败和无数据的状态 Demo: layout: <com.dxc.loadingstateview.widget.LoadingStateView android:id="@+id/loading_view" android:layout_width="wrap_c...

Loading HUD

####IOS Loading HUD,可以显示加载成功,失败,或无数据的状态 基于https://github.com/pkluz/PKHUD 和 https://github.com/iamim2/OneLoadingAnimation 做了部分修改,去除了无用的代码和部分动画效果,并添加了无结果时的动画 Demo: 使用: show: DxLoadingHUD.sha...

List Index View

android 列表索引View,点击或移动有放大效果 布局: <com.dxc.listindexview.widget.ListIndexView android:id="@+id/index_view" android:layout_width="match_parent" android:layout_height="ma...

Calendar icon

####日历图标两枚 1: 2:

Carthage的使用

Carthage 是一个轻量级的项目依赖管理系统,比CoCoaPods更灵活,对项目的侵略性比较小。 Carthage是使用xcodebuild来将第三方类库编译为二进制库,剩下的集成工作由开发人员完成。 CocoaPods和Carthage相比,CocoaPods是一个生态,可以方便的查找和集成第三方代码库。Carthage是一个去中心化的依赖管理系统,不提供能依赖的项目列表,减少维护...

Floating label textfield

####Material design风格的输入框的IOS版本,swift语言实现 Demo: 使用: 初始化: let textField = MDTextField.init(frame: CGRectMake(x, y, width, height)) 设置高亮颜色: textField.highLightColor = UIColor.blueColor() 显...

RxJava操作符

RxJava 组合操作符 本文所用的到Observable对象和subscriber: Observable<Integer> o1 = Observable.just(1,2,3).delay(5, TimeUnit.SECONDS); Observable<Integer> o2 = Observable.just(11,12,13).delay(3,Time...