前言:累了。直接说重点:总结问题,积累经验。
问题:
1.沉浸式状态栏
2.http和Socket的区别
3.进程保活
4.屏幕适配
5.加密
6.性能优化
7.数据结构
8.IM的原理
9.三方推送的原理
解决:
1.沉浸式状态栏
如果我们只是使用到单纯的根据Activity标题的颜色来变换的话,就比较简单
再设置
集合完成基本的沉浸式状态栏的使用。
如果我们是要根据我们Activity中的Fragment的标题颜色来进行改变的话,我们就需要单独设置:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getActivity().getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
来完成我们单独设置每一个页面不一样的沉浸式状态栏。
效果图:
2.http和Socket的区别
HTTP
HTTP(HyperText Transfer Protocol):超文本传输协议
HTTP是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用,HTTP协议是应用层的协议!
特点:
- 短连接,响应后断开;
- 应用级接口,使用方便,对开发要求不高,容错性强;
- 传输速度慢,数据包大;
- 若进行实时交互,服务器压力大;
- 安全性差;
Socket
Socket:套接字
Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元!Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
特点:
- 长连接,通常情况下Socket连接就是TCP连接,不会主动断开(心跳包);
- 传输字节,传输数据可自定义,数据量小;
- 传输速度快,性能高,适合实时交互;
- 安全性强,可加密;
- 需要解析传输数据,开发要求高,增加开发量;
3.进程保活
进程的划分
Android中的进程也是有着严格的等级,分了三流九等,Android系统把进程划为了如下几种(重要性从高到低):
方案一:开启一个像素的Activity
据说这个是手Q的进程保活方案,基本思想,系统一般是不会杀死前台进程的。所以要使得进程常驻,我们只需要在锁屏的时候在本进程开启一个Activity,为了欺骗用户,让这个Activity的大小是1像素,并且透明无切换动画,在开屏幕的时候,把这个Activity关闭掉,所以这个就需要监听系统锁屏广播.
方案二:进程相互唤醒
顾名思义,就是指的不同进程,不同app之间互相唤醒,如你手机里装了支付宝、淘宝、天猫、UC等阿里系的app,那么你打开任意一个阿里系的app后,有可能就顺便把其他阿里系的app给唤醒了。
方案三:JobSheduler
JobSheduler是作为进程死后复活的一种手段,native进程方式最大缺点是费电, Native 进程费电的原因是感知主进程是否存活有两种实现方式,在 Native 进程中通过死循环或定时器,轮训判断主进程是否存活,当主进程不存活时进行拉活。其次5.0以上系统不支持。 但是JobSheduler可以替代在Android5.0以上native进程方式,这种方式即使用户强制关闭,也能被拉起来
屏幕适配
px与dp适配的原理
px适配原理:
根据设备屏幕的分辨率各自写一套dimens.xml文件,然后根据一个基准分辨率(例如720x1080),将宽度分成720份,取值为1px——720px,将高度分成1080份,取值为1px——1080px。生成各自dimens.xml文件对应的值。
dp适配原理:
dp适配原理与px适配一样,区别就在于px适配是根据屏幕分辨率,即拿px值等比例缩放,而dp适配是拿dp值来等比缩放而已。
问题:既然原理都一样,都需要多套dimens.xml文件,为什么说dp适配就比px适配好呢?
1.因为px适配是根据屏幕分辨率的,Android设备分辨率一大堆,而且还要考虑虚拟键盘。而dp适配无论手机屏幕的像素多少,密度比值多少,80%的手机的最小宽度dp值(widthPixels / density)都为360dp,这样就大大减少了dimens.xml文件。
2.px适配会根据设备的分辨率去找对应的dimens.xml文件(如下图,运行在分辨率为1920x1080的手机上,系统会自动找到对应的values-1920x1080文件),那dp适配呢?
3.dp适配也是一样的,只不过dp适配是根据“最小宽度(Smallest-width)限定符”来找的,需要注意的是“最小宽度”是不区分方向的,即无论是宽度还是高度,哪一边小就认为哪一边是“最小宽度”。所以如果当前设备最小宽度(以 dp 为单位)为400dp,那么系统会自动找到对应的values-sw400dp文件夹下的dimens.xml。
推荐一款超级好用的屏幕适配插件!
加密
三种常用的加密方式:MD5,AES,RSA
一、MD5
MD5本质是一种散列函数,用以提供消息的完整性保护。
特点:
1.压缩性:任意长度的数据,算出的MD5值长度都是固定的;
2.容易计算:从原数据计算出MD5值很容易;
3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大的区别;
4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(及伪造数据)是非常困难的;
5.不可逆:MD5理论上是不可逆的(但是现在已经可以暴力破解了)。
使用场景:
1.验证密码:只要算法不变,就能和服务器上的MD5匹配;
2.文件完整性的校验:当下载一个文件时,服务器返回的信息包括这个文件的md5,在本地下载完毕时进行md5加密,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象。
二、RSA加密
RSA加密算法是一种非对称加密算法,非对称加密算法需要两个密钥:公共密钥和私有密钥。公钥和私钥是配对的,用公钥加密的数据只有配对的私钥才能解密。
RSA对加密数据的长度有限制,一般为密钥的长度值-11,要加密较长的数据,可以采用数据截取的方法,分段加密。
使用场景:
文件或数据在本地使用公钥或私钥加密,加密后的数据传送到服务器,服务器使用同一套密钥中的私钥或者公钥进行解密。
三、AES加密
AES加密是一种高级加密标准,是一种区块加密标准。它是一个对称密码,就是说加密和解密用相同的密钥。WPA/WPA2经常用的加密方式就是AES加密算法。
性能优化
一般我们在开发的时候,手机都会有卡顿、ANR 的情况出现,还有 OOM 情况的 出现,所以说我们在开发的时候需要进行性能优化,性能优化又分好多种,布局 优化、内存优化 电量、卡顿、等优化。 布局优化: 这个主要是通过减少层级、减少测量和绘制时间、提高复用性三个方面。 减少层级呢,以前我们可以使用 Merge,merge 主要是进行 UI 布局的优化的, 删除多余的层级,优化 UI。现在我们可以使用现在的约束布局,来减少布局的嵌 套。使用 ViewStub,它是一个看不见的、不占布局位置、占用资源非常小的视 图对象,使用他来提高显示速度。布局复用的话,我们可以使用 includ 来进行 布 局 的 复 用 。 而 且 在 我 们 写 布 局 的 时 候 尽 可 能 少 用 wrap_content 。 wrap_content 会增加布局 measure 时计算成本,在已知宽高为固定值时, 不用 wrap_content 。
具体可以了解一下小编的这篇!
数据结构
上图:
懒得写啦:详细请看:https://www.jianshu.com/p/63236023273c
IM的原理
IM技术原理和工作方式
典型的IM工作方式如下:登陆IM通讯中心(IM通讯服务器),获取一个自建立的历史的交流对象列表(好友列表),然后自身标志为在线状态,当好友列表中的某人在任何时候登录上线并试图通过你的计算机联系你 时,IM系统会发一个消息提醒你,然后你能与他建立一个聊天会话通道进行各种消息如键入文字、通过语音等的交流.
从技术上来说,IM的基本技术原理如下:
通过IM服务器登陆或注销
用户A通过列表找到B,用户B获得消息并与之交谈
通过IM服务器指引建立与B单独的通讯通道
第一步,用户A输入自己的用户名和密码登录IM服务器, 服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号,然后返回用户A登录成功的标志,此时用户A在IM系统中的状态为在线(Online Presence)。
第二步,根据用户A存储在IM服务器上的好友列表 (Buddy List),服务器将用户A在线的相关信息发送给也同时在线的IM好友的PC机,这些信息包括在线状态、IP地址、IM客户端使用的TCP端口 (Port)号等,IM好友的客户端收到此信息后将在予以提示。
第三步是IM服务器把用户A存储在服务器上的好友列表及 相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的IM客户端收到后将显示这些好友列表及其在线状态。
三方推送的原理
1.消息推送的实质
实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户
2. 作用
产品角度:功能需要,如:资讯类产品的新闻推送、工具类产品的公告推送等等
运营角度:活动运营需要,如:电商类产品的促销活动;召回用户 / 提高活跃度等等
作为开发者,不要有需求就接,应该多思考、多理解用户 / 功能的使用场景,有助于我们更好地去选择合适的开发方式
3.原理总结完啦!