安卓技能点说法

专业技能点:
1、熟悉Java中多线程机制,i/o体系,缓存机制,反射机制
Java当中多线程机制,我一般比较喜欢实现Runnble接口,这样的话,当前类不管如何都能拓展新的功能,拓展性比较好。
反射机制,Android前期我没用过多少,后期比较的常用。其中的原因是google公司,为了Android系统安全考虑,隐藏了很多的系统类,如果我们需要使用,则需要查网站上面的API,有时甚至需要使用到反射才能获取到我们所需要的方法,反射的机制帮忙我在项目当中解决了很多的问题,其中一个问题则是,一个项目模块里,需要获取到通讯录的人员,而API隐藏了该系统类,我是通过反射获取到class类,再通过反射到的类调用需要的方法才获取到。


2、Java当中面向对象、封装、继承、多态
我们先从对象来理解,当我需要做一些事情的时候,我不需要先去弄明白,这件事情我需要从什么地方开始学习,我只需要找到擅长做这件事情的人就行了。就好比也家里装修,我需要的是找到一个装修团队,我调用他们进行装修。这样我的事情解决了,我也不用操心这件事如何做。


封装,就好比,我使用的手机,手机里面的CPU,主板之类的,包装进去了手机里,我们用户只需要使用触屏或者按键就行了,从而也保证了CPU的安全性,避免了使用者直接进行操作。


继承,Android在写项目当中,有很多的相似布局,也有很多的相似逻辑,这个时候,我们所需要做的不是一直重复的码代码。而是选择抽取进入一个类当中,剩下的就是让其他相似的地方,继承当前我们封装好的父类,也叫基类,基于该类来实现,这样大大能减少我们的劳动力,也减少了码代码的时间,缩短工期,在公司当中,进度是第一位。


多态,我们在写代码用的比较多的地方则是,接口这块。接口不能new,只能被实现,往往我们使用的时候,则是new出实现它的类即可。接口则是一个抽象的对象,我们要使用则是需要将抽象,实现成普通对象。就好比思想总是需要被行动来实现。


3、熟悉Android中Http/Https协议,Rtmp协议;
Http协议,是一个超文本传输协议,其中需要请求与响应,也就是,Request与Response。在项目当中我们首先要与服务器进行对接,这个时候就需要请求服务器,发送Request,有时我们需要携带参数,比如说,我们需要让服务器帮助我们查询一个人,则需要在请求服务中添加Get,将查询的名字发送过去。如果不想让别人知道这个人名,需要加密,则需要将get替换为POST,将参数封装在消息体当中。服务器查询到后,会进行相应,Response,会将查询到的参数以及响应码,一同发送给我们请求的客户端。CODE200,相应成功。CODE404,没查询到。CODE500,服务器逻辑异常。code,302,重定向。


Https协议,与Http协议比较相似,但是也有区别,最大的区别则是Https,基于Http协议进行了加密处理。举一个例子,我们需要发快递,则需要一层一层的包装,防止物品损坏。我们拿到快递,需要一层一层的拆开。这个过程则是Https交互产生的过程。我要发送服务器请求,先需要打包加密,然后发送服务器,服务器解密查询,响应数据同时也需要加密处理。发送给客户端,客户端进行解密获取数据。这种操作是比较耗时的。如果使用Http,普通的情况3-4秒就能完成一次交互。如果使用Https,则需要20秒以上了,很多时候我们在写客户端联网请求的时候,如果时间过长,则会自己手动写一个联网超时,如果不写,默认是30分钟。我在项目当中就遇见过,与服务器交互用户信息,需要将用户信息交互确保安全,使用Https协议,判断超过20秒交互超时。最后总是报空,打断点我才知道,20秒不够Https请求。所以后期我每次使用到Https,就注意到了该问题。


Rtmp协议,这个协议起初我也比较 陌生,该协议是流媒体协议的一种。是做视频直播所使用到的协议。早期时,也使用了Http来做,Http协议之所以后期没用了,最主要的问题是,Http协议有缓存存储在本地,而如果是用到手机这种进行直播的话,存储空间有限。如果还是使用Http,用户手机的存储空间则会变的越来越少。用户体验也会变的差很多。而Rtmp协议,则是没有缓存文件的。用法与Http协议类似。IOS开发还有一种协议HLS协议进行直播,该协议是针对IOS直播的协议。一般服务器通常会发送这两种包给客户端,客户端则获取到进行播放。


4、熟悉OOM异常的处理以及对应用进行相应的优化。
OOM异常,在项目当中会经常遇见,其中主要的原因还是图片过大,如果不做操作,项目则会崩掉。作为手机,不能和电脑进行比较,手机的CPU也好,内存也好,都没有电脑那么的强大。服务器作为电脑端,设计类属于电脑端,往往在电脑上显示很好的图片,拉到客户手机端都比较的大,手机端的硬件处理不了如此庞大的文件,则会抛出异常。我们首先需要测量使用图片的大小,然后通过缩放等一系列操作,减少图片的大小,让手机硬件能处理当前的图片。这是我们的目的。在项目当中,我们通常则会使用框架来进行图片的缩放,测量,裁剪等处理。有些公司则是用自己封装好的代码来进行处理。我原来的公司如果说没什么事情的时候,我也经常协助项目经理来写一些常用的框架。


5、熟悉三方支付、推送、统计、地图、直播,等第三方开发平台。
这些三方SDK,是辅助我们进行与其他项目交互的作用。比如说当前项目需要使用支付功能,我们则需要与支付宝或者银联,微信进行嵌套,需要再我们项目当中调用其他三方的项目来实现。这种实现的办法往往是通过AIDL来实现的,Android是基于Linux底层的,而Android不能进程与进程访问,Linux则是开了一道后门,需要通过AIDL接口实现。


6、熟悉Android与服务器交互,传递数据,获取数据;
服务器交互,在第三点,Http等,就已经说到,我就不重复了。
传递数据,客户端内部传递数据,通常我们会使用到Hanlder,这是普通的技术手段。而我则是喜欢使用对象来进行传递,这样的传递手法,我觉得更加的灵活,有些时候,需要让对象实现序列化流来完成。就比如说,多级联动,将每一集的数据存在对象中,最后发送给服务器。


7、熟悉Android下的蓝牙开发、wifi模块开发;
在原来的一个项目当中的模块我是用蓝牙来写的,首先系统提供给我们一个类,来使用蓝牙模块,BuletoothAdapter。这个类的对象代表了本地的蓝牙适配器,相当于蓝牙工作流程图中的手机里的蓝牙适配器,也就是说比如这个应用程序是运行在手机上,那么手机上的蓝牙适配器就是本地蓝牙适配器。BuletoothDevice这个类的对象代表了远程的蓝牙设备,相当于蓝牙工作流程图中的计算机里的蓝牙适配器,也就是说比如这个应用程序是运行在手机上,那么BuletoothDevice代表了你要连接的远程的那个设备上面的蓝牙适配器。而我们所做的操作绝大部分需要使用到这两个类。其中还有权限问题:<uses-permission android:name="android.permission.BLUETOOTH" />。获取BluetoothAdapter对象、判断当前设备中是否拥有蓝牙设备判断当前设备中是否拥有蓝牙设备、判断当前设备中的蓝牙设备是否已经打开、得到所有已经配对的蓝牙设备对象。


wifi模块也是大同小异。大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager;
(1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。在我们进行wifi搜索的时候,一般会搜到这些信息,首先是接入点名字、接入点信息的强弱、还有接入点使用的安全模式,是WPA、WPE。打开这个类,我们可以看到以下几个信息BSSID接入点的地址,这里主要是指小范围几个无线设备相连接所获取的地址,比如说两台笔记本通过无线网卡进行连接,双方的无线网卡分配的地址。SSID 网络的名字,当我们搜索一个网络时,就是靠这个来区分每个不同的网络接入点。Capabilities 网络接入的性能,这里主要是来判断网络的加密方式等。Frequency频率,每一个频道交互的MHz数。Level等级,主要来判断网络连接的优先数。这里只提供了一个方法,就是将获得信息编程字符串toString()。


(2)wifiConfiguration 在我们连通一个wifi 接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。这里的数据相对来说比较复杂一下。六个子类WifiConfigurationAuthAlgorthm用来判断加密方法。WifiConfigurationGroupCipher获取使用GroupCipher的方法来进行加密。WifiConfigurationKeyMgmt获取使用KeyMgmt 进行。WifiConfigurationPairwiseCipher获取使用WPA方式的加密。WifiConfigurationProtocol获取使用哪一种协议进行加密。wifiConfigurationStatus获取当前网络的状态。


(3)WifiInfo在我们的wifi已经连通了以后,可以通过这个类获得一些已经连通的wifi连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:getBSSID() 获取BSSIDgetDetailedStateOf() 获取客户端的连通性getHiddenSSID() 获得SSID 是否被隐藏getIpAddress() 获取IP 地址getLinkSpeed()得连接的速度getMacAddress() 获得Mac 地址getRssi() 获得802.11n 网络的信号getSSID() 获得SSIDgetSupplicanState() 返回具体客户端状态的信息


(4)wifiManager 这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。这里还是简单介绍一下这里的方法:
addNetwork(WifiConfiguration config) 通过获取到的网络的链接状态信息,来添加网络
calculateSignalLevel(int rssi , int numLevels) 计算信号的等级
compareSignalLevel(int rssiA, int rssiB) 对比连接A 和连接B
createWifiLock(int lockType, String tag) 创建一个wifi 锁,锁定当前的wifi 连接
disableNetwork(int netId) 让一个网络连接失效
disconnect() 断开连接
enableNetwork(int netId, Boolean disableOthers) 连接一个连接
getConfiguredNetworks() 获取网络连接的状态
getConnectionInfo() 获取当前连接的信息
getDhcpInfo() 获取DHCP 的信息
getScanResulats() 获取扫描测试的结果
getWifiState() 获取一个wifi 接入点是否有效
isWifiEnabled() 判断一个wifi 连接是否有效
pingSupplicant() ping 一个连接,判断是否能连通
ressociate() 即便连接没有准备好,也要连通
reconnect() 如果连接准备好了,连通
removeNetwork() 移除某一个网络
saveConfiguration() 保留一个配置信息
setWifiEnabled() 让一个连接有效
startScan() 开始扫描
updateNetwork(WifiConfiguration config) 更新一个网络连接的信息
此外wifiManaer 还提供了一个内部的子类,也就是wifiManagerLock,WifiManagerLock 的作用是这样的,在普通的状态下,如果我们的wifi 的状态处于闲置,那么网络的连通,将会暂时中断。但是如果我们把当前的网络状态锁上,那么wifi 连通将会保持在一定状态,当然接触锁定之后,就会恢复常态


8、了解UML设计,以及设计程序的用例图、类图、活动图等。
在开发前期,往往需要再项目原型图以及项目逻辑上花费很多的时间,我们原来的公司则是使用原型图进行开发,首选要确定项目的逻辑走向,确定项目的模块细节,再开会进行讨论可行性,最后才是进行开发步骤。


9、Android底层,源码:
我利用空余的时间了解了一些源码,其中有View与ViewGroup;
View,这个源码是提供给控件来使用,控件的测量以及事件等等的操作。绘制,全部封装在该类当中。
ViewGroup这个类,是一个抽象类,开始我比较的好奇,为什么这个类是一个抽象类,后来我看明白了。该类继承View,同样有绘制,测量等方法。唯一不同的是,该类重写的这些方法,均是抽象方法,继承ViewGroup类的,有布局,线性、相对等5个布局均是继承它。这也难怪每个布局的布局状态不一样。其中布局效率最高的是相对与帧布局。原因很简单,这两个布局不需要像其他布局一样,一层一层的测量与绘制。而且每个布局均有自己的方法。比如说相对布局的方法,在线性布局上面很多都没有相对布局的方法。每个布局实现的效果与逻辑均不同。这就是为何需要使用到抽象类的功能,定义抽象类后,还有非抽象方法,非抽象方法,都是布局的共性,比如定义宽高,设置id等操作。这些非抽象方法,都是View这个类当中现搬过来的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值