Android核心知识点
面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验。
下面这份PDF是我翻阅了差不多3个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
不管是Android基础还是Java基础以及常见的数据结构,这些是无原则地必须要熟练掌握的,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
特征包含单个值和描述特征值的 0 ~ n 个描述符。特征值可以被称为类型。类似于类。(是在和 BLE 设备进行通信的时候主要的操作内容)
- 描述符
是用来定义特征值的已定义属性。用来描述特征值的。例如:描述符可以指定人类可读的描述,特征值的可接受范围或者特征值特定的度量单位
- 服务
服务中包含一系列的特征值。例如,我们可以使用名为 “心率监测器”的服务,其中包括"心率测量"等特征。可以在 http://bluetooh.org 上找到基于 GATT 的现有配置文件的服务的列表。
角色和责任
Android 设备和 BLE 设备交互时应用的角色和职责
-
中央与外围设备。
-
GATT 服务器和 GATT 客户端。确定了两个设备建立连接后如何进行相互通信
BLE 权限
应用在使用蓝牙设备的时候必须要声明蓝牙权限 BLUETOOTH
需要这个权限才可以进行蓝牙通信,例如:请求连接、接受连接、和传输数据。
如果还需要发现或者操作蓝牙设置,则需要声明 BLUETOOTH_ADMIN
权限。使用这个权限的前提是要有 BLUETOOTH
权限。
如果要声明我们的应用仅适用于支持 BLE 的设备,需要清单文件中做如下声明
如果我们希望我们的应用程序在不支持 BLE 的设备上也可以运行的时候,只需要将 true 修改成 false 就可以了。
还可以在代码中作出判断
if(!getPackageManager().hasSystemFeature(PackgeManger.FEATURE_BLUETOOTH_LE)){
// 不支持 BLE 设备
}
BLE 通常和位置有关系,因此还需要声明位置权限 ACCESS_COARSE_LOCATION
或者 ACCESS_FINE_LOCATION
没有这些权限扫描将不会返回任何结果。
设置 BLE
- 获得 BluetoothAdapter
BluetoothAdapter 代表设备自己的蓝牙适配器,整个系统只有一个蓝牙适配器,我们的应用程序可以使用此对象与其交互。
这里的获取方法是通过 BluetoothManager 来获取的
BluetoothManager bluetoothManger = getSystemSerive(Context.BULETOOTH_SERVIcE); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
- 启用蓝牙设备
其实这些和普通蓝牙的启动都是一样的。
isEnable()
查看当前是否启用了蓝牙
通过 BluetoothAdapter.ACTION_REQUEST_ENABLE 来启动
- 查找 BLE 设备
这一点和发现普通的蓝牙设备是不一样的
// 通过 Adapter 的 startLeScan(callBack); 方法来开启扫描 // 如果我们有指定的蓝牙设备可以使用 sartLeScan(UUID[],BluetoothAdapter.LeScanCallBakc) 通过 UUID 来指定 BLe // 这个方法已经过时了,官方文档最新支持的扫描蓝牙的方法是通过一个专门的对象 BluetoothLeScanner 用来开启扫描低功耗蓝牙 BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner(); // 这个方法可以有参数,用来过滤要扫描的低功耗蓝牙的,具体的后面讲 scanner.startScan();
只能单独扫描普通蓝牙设备或者 BLE 设备,没有方法同时执行
连接到 GATT 服务器
与 BLE 设备通信,第一步就是要连接到它,就是连接到该设备的 GATT 服务。使用方法 connectGatt()
有三个参数:Context 对象 autoConnect (表示是否在可用的时候自己连接到 BLE 设备) 还有一个回调,所有的交互都在这个回调里面完成。
调用这个方法会返回一个 BluetoothGatt
对象,通过这个对象进行和 BLE 设备的交互。交互的结果会在回调方法中触发。
public class BluetoothLeService extends Service{
private final static String TAG = BluetoothLeService.class.getSimpleName();
private BluetoothManger bluetoothManger;
private BluetoothAdapter bluetoothAdapter;
private String bluetoothDeviceAddress;
private BluetoothGatt bluetoothGatt;
private int connectionState = STATE_DISCONNECTED;
private static final int STATE_DISCONNECTED = 0;
private static final int STATE_CONNETING = 1;
private static final int STATE_CONNECTED = 2;
public final static String ACTION_GATT_CONNECTED = “com.example.bluetooth.le.ACTION_GATT_CONNECTED”;
public final static String ACTION_GATT_DISCONNECTED = “com.example.bluetooth.le.ACTION_GATT_DISCONNECTED”;
public final static String ACTION_GATT_SERVICES_DISCOVERED = “com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED”;
public final satic String ACTION_DATA_AVAILABLE = “com.example.bluetooth.le.ACTION_DATA_AVAILABLE”;
public final static String EXTRA_DATA = “com.example.bluetooth.le.EXTRA_DATA”;
public final static UUID UUID_HEART_RATE_MEASUREMENT = UUID.formString(SampleGattAttributes.HEART_RATE_MEASURMENT);
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback(){
// 你的中央设备连接上 ble 设备后,会回调这个这方法。
@Override
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!