Android

开发中问题思考

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为每一个应用(或进程)分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致了在不同虚拟机中访问同一类的对象会产生多份副本。
多进程会造成的几个问题:

  1. 静态成员和单例模式完全无效
  2. 线程同步机制完全无效
  3. Sharedpreferences的可靠性下降
  4. Application会多次创建
    补充:运行在不同进程中的组件是属于不同的虚拟机和Application的
思考问题四:手机系统时间和网络时间

      有时候app传消息,获取的手机系统时间不准确,和网络时间相差几十秒,导致接收消息方,解析时间和接收方的网络时间相差几十秒,此时接收方解析就会出现问题,为了避免获取的手机系统时间不准确,就需要获取网络时间和手机系统时间对比,相差大的话就用手机获取的网络时间
获取网络时间需要

思考问题五:海外,获取手机时区,一般是根据的格林威治时间划分(中时区),这时候就需要考虑世界上部分国家夏令时和冬令时(太平洋标准时间)
上一篇下一篇

猜你喜欢

热点阅读