Android 网络优化

网络优化的主要手段有三种:
第一种是通过抓包工具找到我们网络请求耗时的地方,然后进行针对性的改进。
第二种是通过将用户的网络请求信息打印到日志,然后我们远程获取这些用户的日志来定位到具体哪些请求耗时高,这样做的好处是我们不用自己复现问题了。
第三种是将网络请求的内容缓存下来,避免用户重复请求后响应慢。

这里我介绍下Fiddler抓包工具+Android Studio+夜神模拟器 的使用方法

Fiddler抓包工具设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
然后下载一个Android模拟器,比如夜神模拟器,然后配置它的网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
夜深模拟器经过以上配置后,在夜深模拟器上安装的APP的任何网络请求都会经过Fiddler
在这里插入图片描述
在这里插入图片描述

点击统计,会看到网络请求的详细信息!!!

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

断点调试功能:

以修改服务器响应给APP的内容为例讲解步骤:
1.为了调试将网络超时时间延长
在这里插入图片描述
2.设置断点
在这里插入图片描述

3.将设置改为之后响应,意思是在断点之后响应
在这里插入图片描述
4.点击发送网络请求
在这里插入图片描述
5.按照下图依次操作
在这里插入图片描述
6.在Android Studio的打印的返回网页的内容中看到了我们刚才添加的内容!!!
在这里插入图片描述

过滤域名功能

在这里插入图片描述

弱网测试功能

在这里插入图片描述
提示:记得把断点清掉
在这里插入图片描述

======================================================

线上流量获取方案:

解决的问题:通过将用户的网络请求信息打印到日志,然后我们远程获取这些用户的日志来定位到具体哪些请求耗时高,这样我们就不用自己复现问题了。
在这里插入图片描述
1.先申请权限
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
专门设置一个Service,每隔一段时间抓取一次当前APP的网络使用情况,把这些信息写入日志,并上传到服务器
在这里插入图片描述

以下是APP获取某个时间段发送流量或者接收流量数据大小的代码:

private void getNetStates(long startTime,long endTime) {
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
            return;
        }
        long netDataRx = 0; //接收到的字节总数
        long netDataTx = 0; //发送的字节总数
        //获取到手机服务
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(
                Context.TELEPHONY_SERVICE);
        //获取到手机卡的ID
        String subscriberId = telephonyManager.getSubscriberId();
        //获取到网络服务管理者
        NetworkStatsManager manager = (NetworkStatsManager) getSystemService
                (Context.NETWORK_STATS_SERVICE);
        NetworkStats networkStats = null;
        NetworkStats.Bucket bucket = new NetworkStats.Bucket();
        try {
            //获取到某个时间段所有应用的某一种模式下的流量统计
            networkStats = manager.querySummary(
                    NetworkCapabilities.TRANSPORT_WIFI, subscriberId, startTime, endTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(networkStats == null){
            return;
        }
        while (networkStats.hasNextBucket()){
            networkStats.getNextBucket(bucket);
            int uid = getUid();
            //如果为true  就是当前应用的流量数据
            if(uid == bucket.getUid()){
                netDataRx += bucket.getRxBytes();
                netDataTx += bucket.getTxBytes();
            }
        }
        Log.e("APP的流量使用情况",netDataRx+"..."+netDataTx);
    }

    /**
     * 获取UID
     * @return
     */
    public int getUid(){
        PackageManager packageManager = getPackageManager();
        //获取到应用的信息类
        try {
            @SuppressWarnings("WrongConstant") ApplicationInfo applicationInfo = packageManager.
                    getApplicationInfo(getPackageName(),PackageManager.GET_ACTIVITIES);
            return applicationInfo.uid;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
    }

也可以在统计信息里面加入这段流量是APP处于前台发生的,还是处于后台发生的
在这里插入图片描述
但是因为用户手机的前后台切换不固定,会导致我们统计的信息也不准确。

============================================================================
数据缓存可以利用OkHttp的缓存接口,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

=======================================================================
在这里插入图片描述

======================================================
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值