Android 性能优化

(三)Android 性能优化 Network Profiler

2020-06-30  本文已影响0人  科技猿人

小酌鸡汤

读书不觉已春深,一寸光阴一寸金。

本文来源《Android 性能优化 全家桶》

为什么应分析应用的网络活动?

 当您的应用向网络发出请求时,设备必须使用高功耗的移动或 WLAN 无线装置来收发数据包。无线装置不仅要消耗电力来传输数据,而且还要消耗额外的电力来开启并且不锁定屏幕。
 使用网络性能剖析器,您可以查找频繁出现的短时网络活动峰值,这些峰值意味着,您的应用要求经常开启无线装置,或要求无线装置长时间不锁定屏幕以处理集中出现的大量短时请求。这种模式说明您可以通过批量处理网络请求,减少必须开启无线装置来发送或接收数据的次数,从而优化应用,改善电池性能。这种方式还能让无线装置切换到低功耗模式,延长批量处理请求之间的间隔时间,节省电量。

为什么要用 network profiler?

 network profiler可以在时间轴上显示实时网络活动,显示发送和接收的数据,以及当前连接的数量。这让您可以检查应用程序如何和何时传输数据,并适当地优化底层代码。

network profiler有哪些缺陷和不足?

**Network Profiling Data Unavailable:** There is no information for the
    network traffic you've selected.

现在,就一起实操体验profiler吧!

(1)profiler实操环境(可选项,用自己的环境和代码也一样)
(2)打开profiler
(3)来吧,一起预览一下吧:
profiler概览
(4)点击NETWORK分类栏,就可以进入到network profiler详情页:
network-profiler详情页
窗口详细说明:
(5)随时查看网络通信情况(在时间轴上拖动以选择要查看的区域):
network-profiler选取片段查看
对各个窗口进行说明:
(六)SamplePop示例代码:
(一)模拟Get请求,先看下代码:
public class NetworkProfilerActivity extends AppCompatActivity {
    private static final String TAG = "NetworkProfilerActivity";

    private static final int MESSAGE_TYPE_GET = 1;
    SafeHandler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_network_profiler);
        mHandler = new SafeHandler(this);
    }

    public void onNetworkMonitorGet(View view) {
        Log.d(TAG, "onNetworkMonitorGet: ");
        new Thread(networkGet).start();
    }

    private static class SafeHandler extends Handler {
        private WeakReference<Activity> reference;

        public SafeHandler(Activity activity) {
            super(activity.getMainLooper());
            reference = new WeakReference<>(activity);
        }

        @Override
        public void handleMessage(@NonNull Message msg) {
            Log.d(TAG, "SafeHandler handleMessage: " + msg.what);
            Activity activity = reference.get();
            if (null != activity) {
                Log.d(TAG, "SafeHandler handleMessage: do work!");
                switch (msg.what) {
                    case MESSAGE_TYPE_GET:
                        String getInfo = (String) msg.obj;
                        ((TextView) activity.findViewById(R.id.network_get_result)).setText(getInfo);
                        break;
                    default:
                        break;
                }
            }
        }
    }

    Runnable networkGet = new Runnable() {
        @Override
        public void run() {
            String getResult = get();
            Log.d(TAG, "networkGet run: getResult = " + getResult);
            Message message = Message.obtain();
            message.what = MESSAGE_TYPE_GET;
            message.obj = getResult;
            mHandler.sendMessage(message);
        }
    };

    private String get() {
        String message = "";
        try {
            URL url = new URL("https://www.baidu.com");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Accept-Encoding", "identity");
            connection.setConnectTimeout(10 * 1000);
            connection.connect();
            InputStream inputStream = connection.getInputStream();
            byte[] data = new byte[1024];
            StringBuffer sb = new StringBuffer();
            int length = 0;
            while ((length = inputStream.read(data)) != -1) {
                String s = new String(data, Charset.forName("utf-8"));
                sb.append(s);
            }
            message = sb.toString();
            inputStream.close();
            connection.disconnect();
        } catch (Exception e) {
            Log.e(TAG, "get: ", e);
        }
        return message;
    }
}

(二)NetworkProfilerActivity界面如下:
网络优化模拟界面
(三)现在操练起来吧……

小编的扩展链接

参考链接

采菊东篱下,悠然见南山

举手之劳,赞有余香! ❤ 比心 ❤

上一篇 下一篇

猜你喜欢

热点阅读