Android 網絡請求的選擇邏輯(Connectivity Modules)

代碼分析

ConnectivityManager

packages/modules/Connectivity/framework/src/android/net/ConnectivityManager.java

許多APN已經棄用,應用層統一用 requestNetwork() 來請求網絡。

 [ConnectivityManager]
 [ConnectivityManager] example

 [ConnectivityManager] requestNetwork()
 [ConnectivityManager] requestNetwork()

sendRequestForNetwork
 [ConnectivityManager] sendRequestForNetwork

sendRequestForNetwork

此接口是針對“任何類型網絡請求”都會執行的公共邏輯,包括 WiFi、Cellular(蜂窩數據)、以太網、有線、藍牙等。

只負責請求的注冊、回調的掛鉤、AIDL通信與系統服務托管,并不區分底層是wifi還是cellular真正的“分配哪個網絡(WiFi還是Cellular)”的事,是在系統服務 ConnectivityService(以及更下游的 NetworkAgent、NetworkFactory)里完成判斷和分配的。

NetworkCapabilities need 這個參數規定了請求的網絡屬性和能力,由 ConnectivityService(system service) 進行分配:

  • 指定 TRANSPORT_WIFI(只想要WiFi網絡,NetworkCapabilities.TRANSPORT_WIFI)
  • 指定 TRANSPORT_CELLULAR(只想用數據蜂窩,NetworkCapabilities.NET_CAPABILITY_INTERNET)
  • 可以“都不指定”或者指定多個,系統幫自動選擇或監聽。
  • Android 自 9.0(API 28)起,ConnectivityService/NetworkStack 支持“IP over Bluetooth”(PAN,也叫 Bluetooth tethering 藍牙網絡共享)的情況,可以作為一種網絡傳輸方式存在
    • 在 NetworkCapabilities 的定義中,TRANSPORT_BLUETOOTH 已經是一個合法的 Transport 類型。即——如果有藍牙 PAN 設備連接,Android 會將其當做一種“有能力提供 IP 網絡通信”的鏈路。
    private NetworkRequest sendRequestForNetwork(int asUid, NetworkCapabilities need,NetworkCallback callback, int timeoutMs, NetworkRequest.Type reqType, int legacyType,CallbackHandler handler) {printStackTrace();checkCallbackNotNull(callback);//非默認跟蹤請求,如果沒指定網絡能力(need)就是非法調用。if (reqType !=

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85408.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#建立與數據庫連接(版本問題的解決方案)踩坑總結

1.如何優雅的建立數據庫連接 今天使用這個deepseek寫代碼,主要就是建立數據庫的鏈接,包括這個建庫建表啥的都是他整得,我就是負責執行,然后解決這個里面遇到的一些問題; 其實我學習這個C#不過是短短的4天的時間&…

FastAPI的初步學習(Django用戶過來的)

我一直以來是Django重度用戶。它有清晰的MVC架構模式、多應用組織結構。它內置用戶認證、數據庫ORM、數據庫遷移、管理后臺、日志等功能,還有強大的社區支持。再搭配上Django REST framework (DRF) ,開發起來效率極高。主打功能強大、易于使用。 曾經也…

提升IT運維效率 貝銳向日葵推出自動化企業腳本功能

在企業進行遠程IT運維管理的過程中,難免會涉及很多需要批量操作下發指令的場景,包括但不限于下列場景: ● ?規模設備部署與初始化、設備配置更新 ● 業務軟件安裝與系統維護,進行安全加固或執行問題修復命令 ● 遠程設備監控與…

最簡單的遠程桌面連接方法是什么?系統自帶內外網訪問實現

在眾多遠程桌面連接方式中,使用 Windows 系統自帶的遠程桌面連接功能是較為簡單的方法之一,無論是在局域網內還是通過公網進行遠程連接,都能輕松實現。 一、局域網內連接步驟 1、 開啟目標計算機遠程桌面功能:在目標計算機&…

JVM(2)——垃圾回收算法

本文將穿透式解析JVM垃圾回收核心算法,涵蓋7大基礎算法4大現代GC實現3種內存分配策略,通過15張動態示意圖GC日志實戰分析,帶您徹底掌握JVM內存自動管理機制。 一、GC核心概念體系 1.1 對象存亡判定法則 引用計數法致命缺陷: // …

基于Spring Boot+Vue的“暖寓”宿舍管理系統設計與實現(源碼及文檔)

基于Spring BootVue的“暖寓”宿舍管理系統設計與實現 第 1 章 緒論 1.1 論文研究主要內容 1.1.1 系統概述 1.1.2 系統介紹 1.2 國內外研究現狀 第 2 章 關鍵技術介紹 2.1 關鍵性開發技術的介紹 2.1.1 Java簡介 2.1.2 Spring Boot框架 2.2 其他相關技術 2.2.1 Vue.J…

基于Java的不固定長度字符集在指定寬度和自適應模型下圖片繪制生成實戰

目錄 前言 一、需求介紹 1、指定寬度生成 2、指定列自適應生成 二、Java生成實現 1、公共方法 2、指定寬度生成 3、指定列自適應生成 三、總結 前言 在當今數字化與信息化飛速發展的時代,圖像的生成與處理技術正日益成為眾多領域關注的焦點。從創意設計到數…

軟考 系統架構設計師系列知識點之雜項集萃(93)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(92) 第169題 人工智能技術已成為當前國際科技競爭的核心技術之一,AI芯片是占據人工智能市場的法寶。AI芯片有別于通常處理器芯片,它應具備四種關鍵特征。&…

Kotlin實現文件下載斷點續傳(RandomAccessFile全解析)

本文將深入探討如何使用Kotlin和RandomAccessFile實現高效的斷點續傳功能,涵蓋原理分析、完整代碼實現、性能優化及工程實踐要點。 一、斷點續傳核心原理 1.1 HTTP斷點續傳協議 #mermaid-svg-EfmgPUx3SFkso8Fc {font-family:"trebuchet ms",verdana,aria…

linux-headers-$(uname -r)和kmod是什么?

2025年6月16日,周一清晨 Linux-headers-$(uname -r)與kmod包詳解 一、linux-headers-$(uname -r)包 linux-headers-(uname -r)是Linux系統中與當前運行內核版本匹配的內核頭文件包,其中(uname -r)會自動替換為當前內核版本號(如5.13.0-19-g…

使用axios及和spirng boot 交互

Axios Axios是一個基于Promise的HTTP庫,可以發送get、post等請求,它作用于瀏覽器和Node.js中。當運行在瀏覽器時,使用XMLHttpRequest接口發送請求;當運行在Node.js時,使用HTTP對象發送請求。 使用步驟: 第…

布局文件的逐行詳細解讀

總覽 源碼 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto&…

VTK 顯示大量點云數據及交互(點云拾取、著色、測量等)功能

VTK (Visualization Toolkit) 是一個強大的開源可視化庫&#xff0c;非常適合處理點云數據。下面將介紹如何使用 VTK 顯示大量點云數據&#xff0c;并實現點云拾取、著色、測量等功能。 基本點云顯示 創建一個基本的點云顯示程序&#xff1a; cpp #include <vtkSmartPoi…

性能優化 - 高級進階: 性能優化全方位總結

文章目錄 Pre1. 概述&#xff1a;性能優化提綱與使用場景2. 準備階段2.1 明確優化范圍與目標2.2 環境與工具準備 3. 數據收集與指標確認3.1 關鍵資源維度與指標項3.2 監控體系搭建與初始采集3.3 日志與追蹤配置 4. 問題定位思路4.1 從整體到局部的分析流程4.2 常見瓶頸維度檢查…

Mybatis之Integer類型字段為0,入庫為null

背景&#xff1a; 由于項目某個功能用到優先級字段來判斷&#xff0c;需要在mysql表中定義一個字段XX&#xff0c;類型為int&#xff0c;默認為0&#xff0c;具體值由后臺配置&#xff0c;正常入庫即可 問題&#xff1a; 由于后臺配置存量其他類型的數據無需該字段&#xff0c…

上海市計算機學會競賽平臺2022年3月月賽丙組洗牌

題目描述 給定一個整數 nn&#xff0c;表示 nn 張牌&#xff0c;牌的編號為 11 到 nn。 再給定一個洗牌置換 f1,f2,…,fnf1?,f2?,…,fn?&#xff0c;進行一次洗牌操作時&#xff0c;應將第一號位置的牌交換到第 f1f1? 號位置&#xff0c;將第 ii 號位置的牌交換到第 fifi…

DINO-R1:激勵推理能力的視覺基礎模型

摘要 近期&#xff0c;人們對大型語言模型&#xff08;如DeepSeek-R1&#xff09;推理能力的關注呈爆炸式增長&#xff0c;通過基于強化學習的微調框架&#xff08;如組相對策略優化&#xff08;Group Relative Policy Optimization&#xff0c;GRPO&#xff09;方法&#xff…

Linux--LVM邏輯卷擴容

Linux–LVM邏輯卷擴容 文章目錄 Linux--LVM邏輯卷擴容?? LVM 常用命令分類及基本格式? 1. 物理卷(PV)相關命令? 2. 卷組(VG)相關命令? 3. 邏輯卷(LV)相關命令?? 三、查看類命令簡寫說明使用命令及基本格式:lvm邏輯卷擴容步驟:1.添加硬盤設備2.檢測新增硬盤 添加…

C#基礎語法與控制臺操作

1. 控制臺操作基礎 控制臺程序是學習C#的起點。以下是一些常用的控制臺操作方法&#xff1a; 1.1. 清除控制臺 Console.Clear(); // 清除控制臺內容1.2. 輸出字符串 Console.WriteLine("Hello World!"); // 在屏幕的當前位置換行輸出字符串 Console.Write("…

100.Complex[]同時儲存實數和虛數兩組double的數組 C#例子

在信號處理中&#xff0c;IQ 數據&#xff08;In-phase and Quadrature&#xff09;通常表示復數形式的信號&#xff0c;其中實部表示同相分量&#xff0c;虛部表示正交分量。Complex[] data 是一個包含 IQ 數據的數組&#xff0c;每個元素是一個復數&#xff0c;表示一個信號樣…