1.3- Zygote

第三節 Zygote

在Android系統中,Zygote是一個非常核心的組件,它扮演著孵化新應用程序進程的角色。Zygote是Android啟動過程中創建的第一個Java虛擬機(JVM)實例(在Android中稱為Dalvik或ART虛擬機,取決于Android的版本),它負責啟動系統服務進程(如SystemServer)以及后續的所有應用程序進程。

Zygote的主要職責

  1. 預加載和共享:Zygote進程會預加載Android框架的核心類庫和資源,這些資源對于后續啟動的應用程序是共享的。這意味著當新的應用程序進程被創建時,它們不需要重新加載這些共享的資源,從而加快了啟動速度。

  2. 進程孵化:當需要啟動一個新的應用程序時,系統不會直接創建一個全新的進程,而是通過Zygote進程的fork()系統調用來創建一個新的進程(稱為應用程序進程)。這個新進程會繼承Zygote進程的內存空間(包括預加載的類庫和資源),然后加載應用程序特定的代碼和資源。這種機制稱為“寫時復制”(Copy-on-Write, CoW),它允許在需要時才復制內存頁,從而節省了內存和提高了效率。

  3. 系統服務初始化:在Android的啟動過程中,Zygote還會負責啟動SystemServer進程,這是Android系統中一個關鍵的進程,負責初始化和管理各種系統服務(如ActivityManagerService、WindowManagerService等)。

Zygote的啟動流程

Zygote的啟動是在Android系統啟動過程中的一個早期階段。當Linux內核啟動完成后,它會啟動一個名為init的守護進程,該進程負責解析init.rc等啟動腳本,并根據這些腳本的指示啟動Zygote進程。Zygote進程啟動后,會執行一系列初始化操作,包括設置環境變量、加載類庫、預加載資源等,然后等待來自ActivityManagerService(AMS)的請求來孵化新的應用程序進程。

Zygote的重要性

Zygote在Android系統中的重要性不言而喻。它是Android應用程序能夠快速啟動和高效運行的關鍵所在。通過預加載和共享核心資源,Zygote減少了每個應用程序進程啟動時的開銷,從而提高了系統的整體性能和用戶體驗。同時,Zygote的孵化機制也確保了Android系統的穩定性和安全性,因為所有應用程序進程都是從同一個可信的源頭(即Zygote)派生出來的。

示例:

1. Zygote進程預加載資源的例子

在Android系統中,Zygote進程會預加載一系列的核心類庫和資源,以便后續的應用程序進程可以快速訪問。這些資源包括但不限于:

  • Android框架的核心類庫:如android.app.Activityandroid.view.View等,這些類庫是開發Android應用程序時經常使用的。
  • 系統資源:如主題資源(themes)、布局資源(layouts)等,這些資源在UI開發中起著至關重要的作用。
  • JNI(Java Native Interface)函數:這些函數允許Java代碼與本地代碼(如C/C++編寫的庫)進行交互,從而訪問硬件功能或執行其他需要高性能的操作。

預加載這些資源的好處是,當新的應用程序進程被創建時,它們可以立即訪問這些已經加載的資源,而無需重新加載,從而加快了啟動速度。

2. Zygote進程孵化新應用程序進程的例子

當用戶啟動一個新的Android應用程序時,系統并不會直接創建一個全新的進程來運行該應用程序。相反,它會通過Zygote進程來孵化一個新的進程。這個過程大致如下:

  • 請求孵化:ActivityManagerService(AMS)收到啟動新應用程序的請求后,會向Zygote進程發送一個孵化新進程的請求。
  • 處理請求:Zygote進程收到請求后,會通過fork()系統調用來創建一個新的進程。這個新進程會繼承Zygote進程的內存空間(包括預加載的類庫和資源),但會執行應用程序特定的代碼。
  • 加載應用程序代碼:新進程在啟動后,會加載并運行應用程序的.apk文件中的代碼和資源。此時,由于它已經繼承了Zygote進程的許多資源,因此啟動速度會更快。

3. Zygote進程與SystemServer進程的關系

在Android系統的啟動過程中,Zygote進程還會負責啟動SystemServer進程。SystemServer進程是Android系統中一個非常重要的進程,它負責初始化和管理各種系統服務。這些服務包括但不限于:

  • ActivityManagerService(AMS):負責管理應用程序的生命周期和界面展示。
  • WindowManagerService(WMS):負責管理窗口的創建、銷毀和顯示。
  • PowerManagerService(PMS):負責管理設備的電源狀態,如屏幕亮度、睡眠模式等。

Zygote進程通過啟動SystemServer進程,間接地啟動了這些重要的系統服務,從而確保了Android系統的正常運行。

總結

Zygote進程在Android系統中扮演著至關重要的角色。它通過預加載核心資源和孵化新應用程序進程,提高了系統的整體性能和用戶體驗。同時,它還負責啟動SystemServer進程,從而啟動了Android系統中的各種重要服務。這些功能共同構成了Android系統高效、穩定運行的基石。

ActivityManagerService

ActivityManagerService(簡稱AMS)是Android系統中的一個核心服務,主要負責系統中四大組件(Activity、Service、BroadcastReceiver、ContentProvider)的啟動、切換、調度以及應用程序進程的管理和調度工作。以下是關于ActivityManagerService的詳細解析:

一、AMS的主要職責

  1. 組件管理

    • 負責啟動、停止和管理四大組件的生命周期,確保它們按照預期的方式運行。
    • 管理應用程序的任務棧,負責創建、切換、移動和關閉任務。任務棧是應用程序組件的運行環境,AMS確保任務棧的正確創建和維護,以提供用戶友好的應用程序切換體驗。
  2. 進程管理

    • 管理應用程序的進程,包括創建、殺死、調度進程。
    • 監控應用程序的資源使用情況,根據系統資源的需求動態地管理進程,以確保系統的穩定性和性能。
  3. 應用間通信

    • 處理應用程序之間的通信,例如Intent傳遞、Broadcast派發等。
    • 協調不同應用程序之間的交互,確保應用程序之間能夠正確地發送和接收消息。
  4. 系統服務管理

    • 管理系統中的其他服務,例如PackageManagerService、WindowManagerService等。
    • 負責與這些服務進行交互,以確保整個系統的正常運行。
  5. 系統廣播處理

    • 處理系統級別的廣播事件,例如屏幕解鎖、電量低等。
    • 負責分發系統廣播,并通知相關的應用程序或組件。

二、AMS的初始化

AMS的初始化是在system_server進程啟動時進行的。主要步驟包括:

  1. 調用ActivityManagerService.main()方法,返回Context對象。
  2. 調用ActivityManagerService.setSystemProcess(),將system_server進程加入AMS,便于后者管理。
  3. 調用ActivityManagerService.installSystemProviders(),將SettingsProvider等系統級provider放到system_server進程中運行。
  4. 調用ActivityManagerService.self().setWindowManager(),在內部保存WindowManagerService。
  5. 調用ActivityManagerNative.getDefault().showBootMessage(),顯示啟動信息。
  6. 調用ActivityManagerService.self().systemReady(),進行系統的最終準備工作,如啟動系統UI、調用Battery、Network等模塊的systemReady()方法等。

三、AMS與其他組件的交互

  1. 與ActivityThread的交互

    • ActivityThread代表一個應用進程的主線程,其main方法由所在進程的主線程執行,負責調度和執行運行在主線程的四大組件。
    • 如果需要在目標進程中啟動Activity,就要通過ApplicationThread與AMS所在的進程(system_server進程)進行通信。
  2. 與Binder機制的交互

    • AMS是一個Binder本地對象,可以實現跨進程通信。它作為服務端提供具體的服務,接收其他進程中的ActivityManagerProxy的請求。
    • ApplicationThread是ActivityThread的內部類,也是一個Binder類型的對象,可以作為應用進程的服務端,接收AMS的指令并將指令發送給ActivityThread執行。

四、總結

ActivityManagerService是Android系統中一個核心的系統服務,它協調了應用程序組件的生命周期、任務棧的管理、進程的調度以及系統服務的協同工作。通過這種方式,它確保了整個系統在用戶和應用程序之間提供了一致、流暢的運行體驗。

WindowManagerService

WindowManagerService(簡稱WMS)是Android系統中的一個重要服務,主要負責管理窗口的顯示和布局,實現窗口的創建、顯示、隱藏、移動、調整大小等功能。以下是關于WindowManagerService的詳細解析:

一、WMS的主要職責

  1. 窗口管理

    • 管理所有應用程序窗口的創建、顯示和銷毀。
    • 分配Surface給窗口,并掌管Surface的顯示順序(Z序)以及大小尺寸。
    • 確保窗口之間的重疊和遮擋關系正確,處理窗口的層級關系。
  2. 窗口布局

    • 計算窗口的位置和大小,根據窗口的屬性和布局參數,將窗口放置在正確的位置。
    • 支持窗口的動畫效果,如窗口的打開、關閉、切換等動畫。
  3. 窗口交互

    • 處理用戶與窗口的交互操作,如點擊、滑動、縮放等。
    • 分配并處理硬件產生的touch事件、keydown事件等,確保這些事件被正確的窗口所接收和處理。
  4. 系統服務協作

    • 與ActivityManagerService(AMS)等系統服務緊密協作,確保Activity的界面正確顯示并響應用戶操作。
    • 作為輸入系統(如InputManagerService)的中轉站,將用戶的輸入事件傳遞給當前活動的窗口。

二、WMS的初始化與啟動

WMS的初始化與啟動通常是在Android系統啟動時,由SystemServer進程來完成的。主要步驟包括:

  1. 調用WMS的main()方法,創建WMS的實例。
  2. 初始化WMS所需的各種組件和服務,如DisplayManagerService、WindowManagerPolicy等。
  3. 將WMS注冊到系統服務中,使其能夠通過ServiceManager被其他組件訪問。

三、WMS的內部機制

  1. 窗口狀態管理

    • WMS內部維護了一個窗口棧(WindowStack),用于管理窗口的顯示順序和層級關系。
    • 每個窗口在WMS中都有一個對應的WindowState對象,用于保存窗口的狀態和屬性。
  2. Surface管理

    • WMS為每個窗口分配一個Surface,Surface是一個用于繪制的畫布,應用程序通過Canvas在Surface上繪制內容。
    • WMS還負責將Surface的內容渲染到屏幕上,確保窗口的顯示正確。
  3. 事件分發

    • WMS接收來自輸入系統的用戶輸入事件,如觸摸、按鍵等。
    • 根據當前的窗口焦點和層級關系,將事件分發給相應的窗口進行處理。

四、WMS與其他組件的交互

  1. 與ActivityManagerService(AMS)的交互

    • AMS負責管理和調度Activity的生命周期,WMS負責Activity對應的窗口的顯示和布局。
    • 當Activity被創建、顯示或銷毀時,AMS會通知WMS進行相應的窗口操作。
  2. 與InputManagerService(IMS)的交互

    • IMS負責處理用戶的輸入事件,如觸摸、按鍵等。
    • WMS作為輸入系統的中轉站,接收IMS傳來的輸入事件,并將其分發給正確的窗口。
  3. 與SurfaceFlinger的交互

    • SurfaceFlinger是Android系統的合成器,負責將多個Surface的內容合成到屏幕上。
    • WMS與SurfaceFlinger協作,確保窗口的內容能夠正確地顯示在屏幕上。

五、總結

WindowManagerService是Android系統中一個至關重要的服務,它負責管理和控制窗口的顯示和交互。通過與ActivityManagerService、InputManagerService等系統服務的緊密協作,WMS確保了Android應用程序的界面能夠正確、流暢地展示在用戶面前。同時,WMS還提供了豐富的窗口管理功能,如窗口動畫、事件分發等,為開發者提供了強大的窗口管理能力。

PowerManagerService

PowerManagerService(簡稱PMS)是Android系統中的一個核心服務,主要負責電源管理,包括系統待機狀態的控制、屏幕顯示、亮度調節、光線/距離傳感器的控制等。以下是關于PowerManagerService的詳細解析:

一、PMS的主要職責

  1. 電源狀態管理

    • 控制系統的待機、喚醒、睡眠等狀態。
    • 根據用戶的行為和系統策略,調整設備的電源使用模式,以優化電池壽命。
  2. 屏幕管理

    • 控制屏幕的點亮、熄滅、亮度調節等。
    • 響應外部事件(如電源鍵按下、屏幕觸摸等)來點亮或熄滅屏幕。
  3. 傳感器管理

    • 控制光線傳感器、距離傳感器等硬件設備的狀態,以優化用戶體驗和節省電量。
  4. 與其他服務的交互

    • 與ActivityManagerService(AMS)、WindowManagerService(WMS)等系統服務緊密協作,確保電源管理與系統其他部分的協同工作。

二、PMS的啟動與初始化

PMS的啟動通常是在Android系統啟動時,由SystemServer進程來完成的。具體步驟如下:

  1. SystemServer啟動

    • 在SystemServer的main()方法中,調用run()方法。
    • run()方法中,依次啟動引導服務、核心服務和其他服務。
  2. 啟動PMS

    • startBootstrapServices()方法中,通過SystemServiceManager.startService(PowerManagerService.class)啟動PMS。
    • PMS啟動后,會執行其構造方法、onStart()onBootPhase()等方法,完成初始化工作。

三、PMS的內部機制

  1. 服務注冊與交互

    • PMS通過Binder機制與其他組件進行交互,提供電源管理的相關服務。
    • 應用程序通過PowerManager接口與PMS進行交互,申請wakelock、改變屏幕狀態等操作。
  2. 電源管理策略

    • PMS根據系統的電源管理策略,決定設備的電源狀態。
    • 這些策略可能包括用戶設置、系統默認設置、電池電量等因素。
  3. 硬件控制

    • PMS通過HAL層和內核層與硬件設備進行交互,控制設備的電源狀態。
    • 例如,通過向/sys/power/wake_lock/sys/power/wake_unlock文件節點寫數據來申請或釋放鎖,維持屏幕亮滅。

四、PMS的常見功能

  1. 點亮屏幕

    • 響應外部事件(如電源鍵按下、屏幕觸摸等)來點亮屏幕。
  2. 熄滅屏幕

    • 根據用戶行為(如長時間無操作)或系統策略(如進入睡眠模式)來熄滅屏幕。
  3. 亮度調節

    • 根據環境光線或用戶設置自動調節屏幕亮度。
  4. 傳感器控制

    • 控制光線傳感器、距離傳感器等硬件設備的狀態,以優化用戶體驗和節省電量。

五、總結

PowerManagerService是Android系統中一個至關重要的服務,它負責電源管理,包括系統待機狀態的控制、屏幕顯示、亮度調節、光線/距離傳感器的控制等。通過與系統其他部分的緊密協作,PMS確保了Android設備在電源使用方面的優化和用戶體驗的提升。

Zygote相關面試題

在Android系統面試中,Zygote相關的面試題通常涉及其作用、啟動流程、工作原理以及其在系統中的重要性等方面。以下是一些可能的面試題及其詳細回答:

1. Zygote在Android系統中的作用是什么?

回答

Zygote是Android系統中的一個核心進程,其主要作用可以概括為以下幾點:

  • 作為應用程序的母進程:Zygote通過復制自身(fork)來創建新的應用程序進程,從而大大減少了系統資源占用和應用啟動時間。
  • 資源預加載:Zygote在啟動時預加載了Android框架層和核心庫,這些資源被所有由此衍生出來的應用程序進程共享,顯著降低了內存消耗和啟動時間。
  • 啟動SystemServer:SystemServer是Android系統服務的核心進程,負責啟動和管理系統服務,如ActivityManagerService(AMS)、PackageManagerService(PMS)等。Zygote也負責啟動SystemServer進程。

2. 請簡述Zygote的啟動流程。

回答

Zygote的啟動流程大致可以分為以下幾個步驟:

  1. init進程啟動:Linux系統啟動后,init進程作為用戶空間的第一個進程被啟動。
  2. 加載init.rc配置文件:init進程通過解讀init.rc配置文件來啟動系統服務,其中就包括Zygote服務。
  3. 啟動Zygote進程:根據init.rc配置文件中的指令,init進程通過fork+execve系統調用啟動Zygote進程。Zygote進程的執行程序通常是/system/bin/app_process,并帶有特定的參數來指示其作為Zygote運行。
  4. 創建Java虛擬機:Zygote進程啟動后,會創建Dalvik/ART虛擬機(取決于Android版本),并為其注冊JNI(Java Native Interface)方法。
  5. 進入Java框架層:通過JNI調用ZygoteInit的main函數,Zygote進程進入Java框架層,開始執行Java代碼。
  6. 預加載資源:在Java框架層,Zygote會預加載系統所需的類庫和核心Android框架類,以便后續創建的應用程序進程可以共享這些資源。
  7. 等待創建新進程請求:Zygote進程通過Socket監聽來自AMS的創建新進程請求,一旦收到請求,就通過fork創建新的應用程序進程,并在新進程中加載對應的.dex文件和其他資源。

3. Zygote如何優化應用程序的啟動時間?

回答

Zygote通過以下幾種方式優化應用程序的啟動時間:

  • 資源預加載:Zygote在啟動時預加載了Android框架層和核心庫,這些資源被所有由此衍生出來的應用程序進程共享,避免了每個應用程序進程單獨加載相同資源的開銷。
  • 進程復制:當需要創建新的應用程序進程時,Zygote通過fork系統調用復制自身來創建新進程。新進程繼承了Zygote進程中已經加載好的系統資源和庫文件,只需要再加載對應應用的.dex文件和其他資源,從而顯著減少了進程創建的時間。
  • 虛擬機共享:由于Zygote在啟動時創建了Dalvik/ART虛擬機,并通過fork創建的應用程序進程可以繼承這個虛擬機的實例副本,因此新進程可以直接使用虛擬機而無需重新創建,這也加快了應用程序的啟動速度。

4. Zygote進程的安全性是如何保障的?

回答

Zygote進程通過以下幾種機制來保障其安全性:

  • 沙箱機制:新創建的應用程序進程被置于沙箱環境中運行,它們之間的資源和數據相互隔離,防止了進程間的非法訪問和干擾。
  • 特權分離:Zygote進程通過特權分離機制限制了新進程對系統資源的訪問權限,防止了應用程序進程對系統關鍵資源的非法訪問。
  • 代碼簽名驗證:Android系統對安裝的應用程序進行代碼簽名驗證,確保應用程序的完整性和來源可靠性。Zygote在創建新進程時也會檢查應用程序的簽名信息,以防止惡意軟件的運行。

綜上所述,Zygote在Android系統中扮演著至關重要的角色,它通過優化資源加載、進程創建和安全性保障等方面來提升系統的整體性能和穩定性。

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

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

相關文章

如何在勒索軟件攻擊中幸存下來:最佳備份實踐、勒索攔截方案

無論身處什么業務或行業,數據都是您業務的關鍵資產。沒有針對數據進行安全可靠的備份保護,您將會受到許多“可能性”的威脅,無論數據丟失是由于在鍵盤上灑了飲料還是遭受到了勒索軟件的攻擊。 為了確保業務不被中斷,企業數據不會…

Python: 初識Python

文章目錄 1. Python的背景知識1.1 Python是咋來的?1.2 Python的特點1.3 Python能干啥?1.4 Python的缺點 2. 搭建Python環境2.1 安裝Python2.2 安裝PyCharm2.3 用pycharm編寫python程序 1. Python的背景知識 1.1 Python是咋來的? 由Guido van Rossum于1989年圣誕節為打發無…

一個用于管理多個 Node.js 版本的安裝和切換開源工具

大家好,今天給大家分享一個用于管理多個Node.js版本的工具 NVM(Node Version Manager),它允許開發者在同一臺機器上安裝和使用不同版本的Node.js,解決了版本兼容性問題,為開發者提供了極大的便利。 在開發環…

路網雙線合并單線——ArcGISpro 解決方法

路網雙線合并成單線是一個在地圖制作、交通規劃以及GIS分析中常見的需求。雙線路網定義:具有不同流向、不同平面結構的道路。此外,車道數較多的道路(例如,雙黃實線車道數大于4的道路)也可以視為雙線路網,本…

iPhone 如何修改鎖屏密碼?修改密碼的具體步驟總結

修改 iPhone 鎖屏密碼 當你還記得當前設置的鎖屏密碼時,想要修改密碼就非常的簡單了,只需要簡單的點幾下就可以重新設置新密碼,下面是具體的操作步驟: 首先我們進入設置應用程序,然后找到“面容 ID 與密碼”。 然后需…

python3多進程用途和場景

Python3 的多進程模塊 multiprocessing 提供了多種用于并行處理的功能,適用于各種場景。以下是一些常見的用途和場景: 用途 CPU 密集型任務: 多進程適用于需要大量 CPU 計算的任務,例如數值計算、數據處理、圖像處理等。這些任務…

Redis的中BitMap的應用

一、應用場景 通常用于構建布隆過濾器 業務場景需要頻繁的查詢數據庫里的數據,但是這些數據又不一定都存在,一些大量無效的數據庫請求,占用了數據庫的鏈接。 本質上保護數據庫,減少無用的請求。 解決: 1、把查詢的…

(01)Unity使用在線AI大模型(使用百度千帆服務)

目錄 一、概要 二、環境說明 三、申請百度千帆Key 四、使用千帆大模型 四、給大模型套殼 一、概要 在Unity中使用在線大模型分為兩篇發布,此篇文檔為在Python中使用千帆大模型,整體實現邏輯是:在Python中接入大模型—>發布為可傳參的…

護眼臺燈的功能作用有哪些?深挖臺燈護眼是真的嗎

隨著現代生活方式的改變,孩子們面臨著越來越多的視力挑戰。在近視學生中,近10%為高度近視,且占比隨年級升高而增長。幼兒園6歲兒童中有1.5%為高度近視,而高中階段則達到了17.6%。為了守護孩子們的視力健康,在科技飛速發…

關鍵字 internal

在C#中,internal 關鍵字是一個訪問修飾符,它用于限制類型或類型成員的訪問性。當一個類型(類、結構體、接口、枚舉等)或類型成員(字段、屬性、方法、事件等)被聲明為 internal 時,它只能在同一程…

無符號數和有符號數的轉換

1、有符號數轉換成無符號數 1.1 例一 首先,我們需要清楚 C語言中負數是以補碼的形式進行存儲的。 示例:負數-1, (此處,假設是8位二進制表示) 對應正數的原碼:0000 0001;取反&…

通俗易懂多圖透徹講解二叉樹的遍歷--前序, 中序和后序

二叉樹的遍歷是一個數據結構中經常會遇到的知識點, 具體又分為前序, 中序和后序三種. 什么是樹? 先來理解一下什么是樹, 從一個我們相對熟悉的家譜樹(Family Tree)說起吧. 家族的根是爺爺, 然后生了兩個娃, 大伯和你爸爸. 繼續往下, 有堂哥堂姐, 還有你以及你妹, 等等. 一個…

簡化流程,強化協作——揭秘可道云TeamOS文檔審批的實用魅力

在團隊協作的過程中,文檔審批是確保信息安全和流程規范的重要環節。然而,傳統的文檔審批流程往往繁瑣且僵化,難以滿足團隊快速響應和靈活協作的需求。 可道云teamOS的文檔審批功能,以其獨特的靈活性和便捷性,為團隊帶…

吸血鬼之戀

吸血鬼之戀 AI制作,吸血鬼之戀,BGM選自《暮光之城》,希望大家喜歡。 歡迎你分享你的作品到我們的平臺上:http://www.shxcj.com 或者 www.2img.ai 讓更多的人看到你的才華。 創作不易,覺得不錯的話,點個贊吧…

c++字符串實現join方法,使用模板

c字符串實現join方法&#xff0c;使用模板 主要記錄下類成員函數&#xff0c;申明為模板函數的寫法 注意定義迭代器時&#xff0c;前面需要加上typename關鍵字 typename std::vector<T>::iterator it;#pragma once #include <vector> #include <string>clas…

java——Junit單元測試

測試分類 黑盒測試&#xff1a;不輸入代碼&#xff0c;給輸入值&#xff0c;看程序能夠給出期望的值。 白盒測試&#xff1a;寫代碼&#xff0c;關注程序具體執行流程。 JUnit單元測試 一個測試框架&#xff0c;供java開發人員編寫單元測試。 是程序員測試&#xff0c;即白…

PBT激光穿透率測量儀

在現代材料科學與工業制造領域&#xff0c;激光技術以其高精度、高效率和非接觸性等特點&#xff0c;成為了不可或缺的測量與加工手段。其中&#xff0c;PBT&#xff08;聚對苯二甲酸丁二醇酯&#xff09;作為一種重要的熱塑性工程塑料&#xff0c;因其優異的機械性能、耐熱性和…

嵌入式全棧設計思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法構建高效智能電源管理系統(附代碼示例)

智能電源管理系統是一個基于STM32G4微控制器的高性能數字電源控制解決方案。本項目旨在設計一個功能全面、高效穩定的電源管理系統,可廣泛應用于工業控制、新能源、通信設備等領域。 1.1 系統主要特點 高精度數字電源控制&#xff1a;利用STM32G4的高性能ADC和定時器,實現精確…

HTML5+CSS3小實例:純CSS實現奧運五環

實例:純CSS實現奧運五環 技術棧:HTML+CSS 效果: 源碼: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…

Spring MVC中Restful風格引入

一&#xff0c;RESTful概述 在現代Web應用開發中&#xff0c;RESTful架構風格已成為一種標準實踐&#xff0c;特別是在構建可擴展的Web服務時。Spring MVC提供了全面的支持來構建遵循REST原則的Web服務。我在此介紹如何在Spring MVC中實現RESTful風格的Web服務&#xff0c;并通…