- [HTTP协议与TCP/IP协议的关系]
- [如何理解HTTP协议是无状态的]
- 什么是长连接、短连接?
- [TCP连接]
- [TCP短连接]
- [TCP长连接]
- [长连接和短连接的优点和缺点]
目前腾讯云负载均衡对七层负载均衡的HTTP长连接配置,可设置为默认值75s,用户可对不同的负载均衡实例进行自定义配置。那么,HTTP长连接、短连接究竟是什么?
select * from learn
一般开发一个 APP,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理,或者使用AFNetworking/OKHttp这样的网络库,管理好请求线程和队列,再自动做一些数据解析,就结束了。
但对于一些大型 APP,还会想针对网络的一些问题进行进一步优化,包括:
对基于浏览器的前端开发来说,网络这块能做的事情很少,但对于客户端 APP 来说,整个网络请求过程是自由控制的,可以做很多事情,很多大型 APP 都针对这三个问题做了很多网络层的优化,一些新的网络层协议像 HTTP2 / QUIC 也是在这些方面进行了不少优化,在这里边学习边整理,大致列举一下常见的做法。
入职ZTC接近两年,因为业务繁重,从入职开始一直在做业务上的需求,项目还是MVC模式开发,由此可见工程的耦合度极高,也是众多反锁的业务互相关联导致最初开发的时候没有很好的设计架构。经过大半年的边重构项目边合并老项目新需求的开发,见证了开发团队一路走来的努力,Android团队也在自己预期的想法中向前迈进。
在公司的发展方向上,由单一的求职平台,到人脉社交,问答社区的扩展,让我察觉到组件化必然是正确的演进方向。在项目gradle升级到3.x后,依赖隔离的新特性更是帮助我对组件化的推进工作。
在现在的大环境下组件化的优点相信大家都比较熟悉。
现在GitHub上面流行着各大家公司开源的路由库,他们基本采用组件化的方案是
Android中的JSBridge是H5与Native通信的桥梁,其作用是实现H5与Native间的双向通信。要实现H5与Native的双向通信,解决如下四个问题即可:
1、Java如何调用JavaScript
2、JavaScript如何调用Java
3、方法参数以及回调如何处理
4、通信的数据格式是怎么样的
下面从以上问题依次开始讨论:
在Android 中,Java与JavaScript的一切交互都是依托于WebView的。可通过如下方法来完成,其中function()即为JavaScript代码,来实现相应的具体H5层功能
1 | WebView.loadUrl("javascript:function()"); |
要实现在JavaScript中调用Java,就需要在JavaScript中有触发Java方法的对象和方法。在JavaScript中,当调用window对象的prompt方法时,会触发Java中的WebChromeClient对象的onJsPrompt方法,因此可以利用这个机制来实现js调用native的代码。
之前在使用tomcat的时候,启动tomcat默认都会绑定到127.0.0.1这个地址,最近在使用hexo写博客的时候发现通过 hexo server命令启动服务的时候绑定的ip地址是0.0.0.0。那么这两个IP地址到底有什么不同呢?
在讲解两个地址的不同之前,我们先回顾一下IP地址的基础知识。
IP地址由两个部分组成,net-id和host-id,即网络号和主机号。net-id:表示ip地址所在的网络号。host-id:表示ip地址所在网络中的某个主机号码。
即:
1 | IP-address ::= { <Network-number>, <Host-number> } |
在一些项目中会分拆app 和 lib , 这时候引用support的时候,一旦更改版本会出现需要同步更改两个地方的问题.这种情况,可以通过配置gradle.properties实现替换.
在项目编译过程中,gradle.properties配置的值会被编译解析,其作为配置文件使用是很有必要的.
在Android Studio 创建一个项目的时候,Project下面会生成gradle.properties和local.properties文件,如下图:
properties里面的数据格式采用键值对的方式,大概有以下几种写法:
1 | 1. key=value |
这里主要参考以下链接:
https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html
*注意: *在Android Studio 中最好使用第一种写法,要不会有警告
1 | repositories { |
Go to File->Settings->Build, Execution, Deployment->Gradle->Uncheck Offline work option.
无论你是个人开发还是团队,一个良好的代码规范,能够在项目当中发挥举足轻重的作用;它不仅能使你们的开发更加高效,而且还会减少BUG产生的几率,增强代码可维护性及稳定性。
关于规范,我们分两部分来讲,因为Android主要是用Java语言来写的,所以我们区别对待。
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
类名使用UpperCamelCase 风格,必须遵从驼峰形式。
方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长例如:MAX_STOCK_COUNT。
抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始。
杜绝不规范的英文缩写:AbstractClass 缩写成AbsClass;condition缩写成condi;此类随意缩写严重降低了代码的可阅读性。
如果使用到了设计模式,建议在类名中体现出具体的模式:
关于Service或Dao层的命名
1 | public class ComponentFactory |
实体类必须重载toString()方法,这样可以通过调用对象的toString()来排查问题。
Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
正例: “test”.equals(object);
反例: object.equals(“test”);
避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
本文主要是梳理 View 绘制的整体流程,帮助开发者对 View 的绘制有一个更深层次的理解。
View 绘制中主要流程分为measure,layout, draw 三个阶段。
那么发起绘制的入口在哪里呢?
在介绍发起绘制的入口之前,我们需要先了解Window,ViewRootImpl,DecorView之间的联系。
一个 Activity 包含一个Window,Window是一个抽象基类,是 Activity 和整个 View 系统交互的接口,只有一个子类实现类PhoneWindow,提供了一系列窗口的方法,比如设置背景,标题等。一个PhoneWindow 对应一个 DecorView 跟 一个 ViewRootImpl,DecorView 是ViewTree 里面的顶层布局,是继承于FrameLayout,包含两个子View,一个id=statusBarBackground 的 View 和 LineaLayout,LineaLayout 里面包含 title 跟 content,title就是平时用的TitleBar或者ActionBar,contenty也是 FrameLayout,activity通过 setContent()加载布局的时候加载到这个View上。ViewRootImpl 就是建立 DecorView 和 Window 之间的联系。