可以多次实例化NetworkRequest.Builder()吗?

时间:2019-05-17 15:55:25

标签: java android

我希望我的应用有时仅使用WiFi,有时仅使用蜂窝网络,有时两者都使用(默认模式)。为此,我编写了以下函数:

  private void bindToWiFi(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
      final ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkRequest.Builder builder;
      builder = new NetworkRequest.Builder();
      builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
      manager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
          bindingCallback = this;
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            manager.bindProcessToNetwork(network);
          } else {
            //This method was deprecated in API level 23
            ConnectivityManager.setProcessDefaultNetwork(network);
          }
        }
      });
    }
  }

  private void bindToCellular(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
      final ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkRequest.Builder builder;
      builder = new NetworkRequest.Builder();
      builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
      manager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
          bindingCallback = this;
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            manager.bindProcessToNetwork(network);
          } else {
            //This method was deprecated in API level 23
            ConnectivityManager.setProcessDefaultNetwork(network);
          }
        }
      });
    }
  }

  private void unBind(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
      final ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkRequest.Builder builder;
      builder = new NetworkRequest.Builder();
      manager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
          bindingCallback = this;
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            manager.bindProcessToNetwork(network);
          } else {
            //This method was deprecated in API level 23
            ConnectivityManager.setProcessDefaultNetwork(network);
          }
        }
      });
    }
  }

如您所见,我基本上每次都会重新创建一个新的生成器。我对此很担心。

我的上述方法还可以,还是我违反了一些好的做法?如果是这样,哪种更好的方法呢?我担心潜在的内存泄漏或其他令人不快的性能问题。

0 个答案:

没有答案