开发中问题思考
2020-11-30 本文已影响0人
码农修行之路
思考问题一:检测wifi网络频段,2.4G、5G、二合一自动选择
WifiManager mWifiManager = getSystemService(WIFI_SERVICE);
List<ScanResult> scanResults = mWifiManager.getScanResults();
scanResults遍历,如果是二合一的频段,会搜索到两个相同名字的网络,一个2.4G一个5G,这时候需要判断是否有两个相同SSID的网路,一个2.4G一个5G,之后就可以判断此网络是二合一网络
遍历获取scanResult.frequency网络频段
两个标记,一个是否是5G的标记,一个是2.4G标记
int wifiNetworkType = Constant.ADD_DEV_NETWORK_2_4_G; // 默认2.4GHz
boolean is5GHz = false;
boolean is24GHz = false;
for(int i = 0; i < scanResults.size(); i++) {
if (!is5GHz) {
is5GHz = is5GHz(scanResult.frequency);
}
if (!is24GHz) {
is24GHz = is24GHz(scanResult.frequency);
}
}
if (is24GHz && is5GHz) {
// 二合一网络
wifiNetworkType = Constant.ADD_DEV_NETWORK_DOUBLE; // 二合一网络
} else if (is24GHz && !is5GHz){
// 2.4G网络
wifiNetworkType = Constant.ADD_DEV_NETWORK_2_4_G; // 2.4G网络
} else if (!is24GHz && is5GHz) {
// 5G网络
wifiNetworkType = Constant.ADD_DEV_NETWORK_5_G; // 5G网络
}
/**
* 判断wifi是否为2.4G
*/
public static boolean is24GHz(int frequency) {
return frequency> 2400 && frequency < 2500;
}
/**
* 判断wifi是否为5G
*/
public static boolean is5GHz(int frequency) {
return frequency > 4900 && frequency < 5900;
}
思考问题二:搜索筛选框字典
写出所有可能排列组合的情况,适用于搜索产品较少的情况,每一个厂商的产品列表组合放在一个String里面,搜索是str.contains(CharSequence s)检索String里面是否包含搜索输入的内容,监听输入编辑框每次变更(新增、删除字符)
思考问题三:多进程模式开启的问题
在Android(一个应用)中使用多进程只有一个方法,就是在清单文件中指定四大组件的android:process属性
android为每一个应用(或进程)分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致了在不同虚拟机中访问同一类的对象会产生多份副本。
多进程会造成的几个问题:
- 静态成员和单例模式完全无效
- 线程同步机制完全无效
- Sharedpreferences的可靠性下降
- Application会多次创建
补充:运行在不同进程中的组件是属于不同的虚拟机和Application的
思考问题四:手机系统时间和网络时间
有时候app传消息,获取的手机系统时间不准确,和网络时间相差几十秒,导致接收消息方,解析时间和接收方的网络时间相差几十秒,此时接收方解析就会出现问题,为了避免获取的手机系统时间不准确,就需要获取网络时间和手机系统时间对比,相差大的话就用手机获取的网络时间
获取网络时间需要