1

我的应用程序不断接收位置更新和活动识别更新,并不时将所有收集到的活动和位置记录分批发送到服务器。

我知道每次我执行网络操作时——WIFI 或手机的无线电状态(取决于当前的活动连接)都会进入活动状态,并在待机状态下保持一段时间——什么会显着影响电池的使用执行频繁的网络请求,因此我正在安排警报以执行与服务器的同步,以便在 2 小时内执行一次,或者在用户明确使用我的应用程序时执行。

另一方面,如果可能,我们希望以更短的时间间隔将收集到的数据与服务器同步。

我在想,如果我能知道无线电状态何时因任何原因变为活动状态(例如,当另一个应用程序执行网络操作时) - 这将是执行我的同步的好机会,以利用无线电无论如何打开的事实或在待机和消耗更多的电力。

我的问题:

  • 是否可以按照我的描述检测到这种无线电状态?
  • 如果是,那么如何?你认为这样做是个好主意吗?

我期待JobSchedulerandroid 5.0 中引入的新功能将在网络无线电处于活动状态时支持调度作业,但根据 API 似乎并非如此。我相信它会同时批处理所有需要网络的工作,但只有在设备上的所有应用程序都明智地使用它的理想世界中才会有好处。

4

2 回答 2

1

简短的回答是否定的,您目前无法确定网络适配器的当前状态。

Android 不允许您深入系统。但是,您可以在查看这四个文件中的值时自行估计状态:

/sys/devices/virtual/net/<InterfaceName>/statistics/tx_packets
/sys/devices/virtual/net/<InterfaceName>/statistics/rx_packets
/sys/devices/virtual/net/<InterfaceName>/statistics/tx_bytes
/sys/devices/virtual/net/<InterfaceName>/statistics/rx_bytes

您可以读取这些文件的当前流量并将其映射到使用的网络适配器的适当状态模型。但是,该模型在 Wifi、UMTS、LTE 等方面差异很大。在 PowerTutor 开发人员的这份白皮书(第 4 页)中,您可以看到 Wifi 和 3G 的状态机以及转换条件和时间(根据经验发现它们) )。

在大多数情况下,最好坚持使用Android 开发者页面提供的网络使用提示。老实说,我记得我也读过一些关于网络计时器的东西,但再也找不到源了。

编辑: 我找到了缺失的来源:Android 5.0 引入了Project Volta ,为您提供了额外的电池功能。

于 2015-01-11T17:06:08.740 回答
1

我对同样的事情很好奇,我终于在这里找到了答案: http ://android.xsoftlab.net/training/efficient-downloads/connectivity_patterns.html

这个想法是像这样使用ConnectivityManager

connectivityManager.addDefaultNetworkActiveListener(new OnNetworkActiveListener() {
            @Override
            public void onNetworkActive() {
                // PREFETCH HERE
            }
});

不过,我还没有尝试过。

于 2017-12-13T18:42:37.963 回答