Android開發——初步學習Activity:什么是Activity

Android開發——初步學習Activity:什么是Activity

? 在 Android 中,Activity 是一個用于展示用戶界面的組件。每個 Activity 通常對應應用中的一個屏幕,例如主界面、設置界面或詳情頁。Activity 負責處理用戶的輸入事件,更新 UI,并與其他組件(如服務、廣播接收器)進行交互。如果接觸過Qt開發的同志,一點不會難以想到Activity就有點像咱們的QMainWindow一樣,作為UI交互大的容器。

🛠?創建一個Activity

? 咱們先不deep dive到Activity的基本原理,我們就先創建一個玩玩。一般而言,咱們作為快速開發者,不會自己鹿代碼和在XML中自己手動改,容易出錯。

基本步驟(一次性的)
  1. 打開項目:啟動 Android Studio,打開您的項目。
  2. 右鍵點擊包名:在項目視圖中,導航到 app > src > main > java > com.example.yourapp,右鍵點擊您的包名(例如 com.example.myapp)。
  3. 選擇創建 Activity:選擇 New > Activity,然后選擇您想要的 Activity 類型,例如 Empty Activity
  4. 配置 Activity
    • Activity Name:輸入 Activity 的名稱(如 SecondActivity)。
    • Layout Name:輸入布局文件的名稱(默認為 activity_second)。
    • Title:設置該 Activity 的標題。
    • Launcher Activity:如果您希望此 Activity 為啟動 Activity,請勾選此選項。
    • Source Language:在今天,你只能使用Kotlin了,Java是不被支持的。
  5. 完成創建:點擊 Finish,Android Studio 會自動生成相應的 Activity 類、布局文件,并在 AndroidManifest.xml 中注冊該 Activity。
手動創建 Activity(分步進行)

如果您希望更靈活地控制創建過程,可以手動創建 Activity。

  1. 創建 Activity 類

    • 在項目視圖中,導航到 app > src > main > java > com.example.yourapp
    • 右鍵點擊您的包名,選擇 New > Java ClassNew > Kotlin Class/File
    • 輸入類名(如 SecondActivity),并使其繼承 AppCompatActivity
    • 實現 onCreate() 方法,并通過 setContentView() 設置布局文件。
    public class SecondActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);}
    }
    
  2. 創建布局文件

    • res > layout 目錄下,右鍵點擊,選擇 New > Layout Resource File
    • 輸入文件名(如 activity_second.xml),并設計您的布局。
  3. 注冊 Activity

    • 打開 AndroidManifest.xml 文件。
    • <application> 標簽內,添加以下代碼以注冊新創建的 Activity:
    <activity android:name=".SecondActivity" />
    

在 AndroidManifest.xml 中注冊 Activity(一般你不用做這個,Android Studio幫你做了)

? AndroidManifest.xml是咱們的安卓APP的一個總導覽,我們的Activities必須在這里被表達,所以,無論是使用向導還是手動創建 Activity,都需要在 AndroidManifest.xml 中注冊該 Activity。通常,Android Studio 會自動為您完成此操作,但如果沒有,您可以手動添加:

<activity android:name=".SecondActivity" />

如果您希望此 Activity 為啟動 Activity(即應用啟動時首先顯示的界面),需要在 <activity> 標簽中添加 intent-filter

<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

準備完成我們的業務——Layout文件

? Activities的默認代碼中,就幫助我們生成好了OnCreate方法,一般而言,我們的默認代碼包括但不限于:回調父類的onCreate創建方法,下一步,我們往往是要加載我們的ContentView,讓我們的APP的布局文件生效。

? 在Qt中,咱們的Layout是Ui_xxx.ui搞定的,它本身是一個XML文件,聲明式的說明我們的布局如何。安卓自身也是這樣做的。我們會在Layout文件夾下創建layout XML文件,在代碼中采用資源加載的方式聯合起來搞定我們的布局加載動作。

什么是 Android 布局文件?

Android 布局文件是以 XML 格式編寫的文件,位于項目的 res/layout/ 目錄下。它們描述了應用界面的結構和外觀,包括視圖組件(如按鈕、文本框、圖片等)及其排列方式。通過布局文件,開發者可以在不編寫大量代碼的情況下,快速構建出界面。


🧩 布局文件的基本結構

一個典型的布局文件通常包含以下幾個部分:

  1. XML 聲明和命名空間

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
    
    • xmlns:android:聲明 XML 命名空間,Android 系統通過它識別屬性。
    • android:layout_widthandroid:layout_height:定義布局的寬度和高度,常用值有 match_parentwrap_content 和具體的 dp 值。
  2. 視圖組件(Views)

    在布局文件中,視圖組件是構建 UI 的基本單元,如:

    <TextView android:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, World!" />
    
    • android:id:為視圖指定唯一標識符,供代碼中引用。
    • android:text:設置文本內容。
  3. 布局容器(ViewGroup)

    布局容器是用于組織和排列子視圖的容器類,如:

    • LinearLayout:線性布局,按水平或垂直方向排列子視圖。
    • RelativeLayout:相對布局,子視圖相對于父視圖或其他兄弟視圖定位。
    • ConstraintLayout:約束布局,使用約束關系定位子視圖,推薦用于復雜布局。
    • FrameLayout:幀布局,通常用于顯示單一視圖或堆疊多個視圖。

    示例:

    <LinearLayout android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 子視圖 -->
    </LinearLayout>
    

🛠? 如何在 Android Studio 中創建布局文件

在 Android Studio 中創建布局文件的步驟如下:

  1. 使用向導創建布局文件
    • 在項目視圖中,右鍵點擊 res/layout 目錄,選擇 New > Layout Resource File
    • 輸入文件名(如 activity_main.xml),選擇根布局類型(如 LinearLayout)。
    • 點擊 OK,Android Studio 會自動生成布局文件。
  2. 手動編寫布局文件
    • res/layout 目錄下創建新的 XML 文件。
    • 使用上述結構和組件,手動編寫布局內容。
  3. 使用設計視圖
    • 打開布局文件,切換到 Design 視圖。
    • 使用拖拽方式添加和配置視圖組件,Android Studio 會自動生成相應的 XML 代碼。

💡 常用布局類型及其適用場景

布局類型描述適用場景
LinearLayout子視圖按線性方向排列(水平或垂直)簡單的列表、表單布局
RelativeLayout子視圖相對于父視圖或其他兄弟視圖定位復雜的布局,子視圖之間有相對關系時
ConstraintLayout使用約束關系定位子視圖,性能優于嵌套布局推薦用于復雜布局,減少嵌套層級,提高性能
FrameLayout子視圖堆疊在一起,通常用于顯示單一視圖或覆蓋層顯示單一內容、圖片查看器、視頻播放器等
TableLayout子視圖按行和列排列,適用于表格布局表格數據展示、日歷布局
GridLayout子視圖按網格排列,支持跨行跨列圖像畫廊、日程安排等

📐 布局屬性詳解

  • android:layout_widthandroid:layout_height
    • match_parent:視圖的大小填充父容器。
    • wrap_content:視圖的大小適應其內容。
    • 固定值(如 200dp):指定具體的尺寸。
  • android:orientation
    • horizontal:子視圖水平排列。
    • vertical:子視圖垂直排列。
  • android:paddingandroid:margin
    • padding:視圖內容與邊界之間的內邊距。
    • margin:視圖與其他視圖之間的外邊距。
  • android:gravityandroid:layout_gravity
    • gravity:控制視圖內部內容的對齊方式。
    • layout_gravity:控制視圖在父容器中的對齊方式。
  • android:layout_weight
    • LinearLayout 中,指定視圖占用剩余空間的比例。

📱 響應式布局與多屏適配

為了適應不同設備和屏幕尺寸,Android 提供了多種方式進行布局適配:

  1. 布局資源目錄分組

    • res/layout/:默認布局。
    • res/layout-large/:大屏設備布局。
    • res/layout-land/:橫屏布局。
    • res/layout-sw600dp/:屏幕寬度大于等于 600dp 的設備布局。

    Android Studio 支持根據設備配置自動選擇合適的布局資源。

  2. 布局變體(Layout Variants)

    • 在 Android Studio 中,右鍵點擊布局文件,選擇 Create Layout Variant
    • 為特定設備配置創建布局變體,如平板、折疊屏等。
  3. 使用 ConstraintLayout

    • 通過約束關系定位視圖,減少嵌套層級,提高布局性能。
    • 支持鏈式布局、偏移量、比例等復雜布局需求。

在布局文件中編寫自己的控件排布

? 咱們說了,布局使用XML編寫,我們其中的控件亦是如此。

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompatxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"/><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Button1Text"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Button2Text"tools:ignore="MissingConstraints" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/button_depatch_activity"android:text="@string/button_start_activity_text"/>
</androidx.appcompat.widget.LinearLayoutCompat>

1. android:id

該屬性為視圖組件指定一個唯一的標識符。在 Java 或 Kotlin 代碼中,可以通過該 ID 引用該按鈕,以便設置點擊事件監聽器或修改其屬性。

例如:

val button = findViewById<Button>(R.id.button_depatch_activity)
button.setOnClickListener {// 處理按鈕點擊事件
}

2. android:layout_widthandroid:layout_height

這兩個屬性定義了視圖組件的寬度和高度。

  • match_parent:視圖將擴展以填充其父容器的剩余空間。
  • wrap_content:視圖將根據其內容的大小來調整自身的尺寸。

在上述示例中,layout_width 設置為 match_parent,表示按鈕的寬度將與其父容器的寬度相同;layout_height 設置為 wrap_content,表示按鈕的高度將根據其內容的高度來調整。


3. android:text

該屬性設置按鈕上顯示的文本內容。在上述示例中,@string/button_start_activity_text 是一個引用字符串資源的方式,表示按鈕上顯示的文本內容來自于 res/values/strings.xml 文件中的 button_start_activity_text 字符串資源。

使用字符串資源的好處是可以方便地進行國際化和本地化,使應用支持多種語言。


4. 其他常用的按鈕屬性

  • android:background:設置按鈕的背景,可以是顏色、圖片或 drawable 資源。
  • android:textColor:設置按鈕文本的顏色。
  • android:textSize:設置按鈕文本的大小。
  • android:padding:設置按鈕內容與邊界之間的內邊距。
  • android:layout_margin:設置按鈕與其他視圖之間的外邊距。

例如:

<Buttonandroid:id="@+id/button_example"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click Me"android:background="@drawable/button_background"android:textColor="@color/white"android:textSize="16sp"android:padding="10dp"android:layout_margin="20dp" />

在代碼中使用我們的布局文件下的控件

? 在上面我們看到了layout下的所有控件都有自己的ID。這是我們訪問控件的一個關鍵。筆者學習了兩種辦法搞定拿到控件這個工作

使用 findViewById 方法

findViewById 是 Android 中傳統的控件查找方式。它通過控件的 ID 在視圖層次結構中查找對應的控件。例如:

val textView: TextView = findViewById(R.id.textView)

優點:

  • 簡單直接:對于小型項目或簡單的布局,findViewById 足夠使用。

缺點:

  • 類型轉換問題:需要手動進行類型轉換,容易出錯。
  • 空指針異常:如果控件未在布局中定義,可能導致空指針異常。
  • 性能問題:每次調用都會遍歷視圖層次結構,可能影響性能。

使用 ViewBinding 方法

ViewBinding 是 Jetpack 提供的一種類型安全、空安全的控件訪問方式。它在編譯時生成綁定類,直接引用控件,避免了類型轉換和空指針異常的問題。例如:

val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val textView: TextView = binding.textView

優點:

  • 類型安全:生成的綁定類直接引用控件,避免了類型轉換問題。
  • 空安全:如果控件未在布局中定義,對應的綁定屬性為 null,避免了空指針異常。
  • 性能優化:綁定類在編譯時生成,運行時無需再次查找控件,提升性能。

缺點:

  • 需要啟用 ViewBinding:需要在 build.gradle 文件中啟用 ViewBinding。
特性findViewByIdViewBinding
類型安全? 手動類型轉換? 自動類型匹配
空安全? 可能導致空指針異常? 自動處理空值
性能? 每次查找控件? 編譯時生成綁定類
使用復雜度? 簡單? 需要啟用 ViewBinding
適用場景小型項目、簡單布局中大型項目、復雜布局

啟用 ViewBinding(需要修改gradle文件)

在項目中啟用 ViewBinding 的步驟如下:

  1. build.gradle 文件中啟用 ViewBinding:

    android {...viewBinding {enabled = true}
    }
    
  2. 在 Activity 或 Fragment 中使用 ViewBinding:

    val binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    

    這樣,您就可以通過 binding.textView 直接訪問控件,而無需使用 findViewById

Activity使用最簡單的Options Menu的辦法

Options Menu 的典型流程:

  1. 你在 res/menu/*.xml 定義菜單資源(<menu> + <item>)。
  2. 系統(或 AppCompat 的框架)在需要時創建一個 Menu 對象并調用 Activity 的 onCreateOptionsMenu(menu) —— 在這里你用 menuInflater.inflate() 把 XML 轉成 Menu 項。
  3. 菜單顯示前會調用 onPrepareOptionsMenu(menu),你可以在這里做按狀態修改(可見性、enable 等)。
  4. 用戶點擊菜單項時,系統調用 onOptionsItemSelected(item),你在這里處理點擊邏輯。
  5. 當你希望運行時刷新菜單,調用 invalidateOptionsMenu()(Activity 方法),系統會觸發 onPrepareOptionsMenu()(必要時會重建)。

基本菜單資源(XML)

res/menu/menu_main.xml(示例)

<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/action_search"android:title="@string/search"android:icon="@drawable/ic_search"app:showAsAction="ifRoom|collapseActionView"app:actionViewClass="androidx.appcompat.widget.SearchView" /><itemandroid:id="@+id/action_settings"android:title="@string/settings"app:showAsAction="never" />
</menu>
  • app:showAsAction:控制是否直接顯示在 Toolbar(action)或放入 overflow。務必用 app 命名空間(res-auto)。
  • 可用屬性:android:idandroid:titleandroid:icon、子 <menu><group>android:checkableBehavior 等。

在 Activity 中 inflate 菜單

MenuInflater.inflate(int menuRes, Menu menu) —— 將 XML 轉為 Menu 項。通常在:

override fun onCreateOptionsMenu(menu: Menu): Boolean {menuInflater.inflate(R.menu.menu_main, menu)// 可在這里初始化 actionView(SearchView 等)return true // 返回 true 表示要顯示菜單
}

注意:返回 true 很關鍵——否則不會顯示菜單。

動態更新菜單

  • onPrepareOptionsMenu(menu: Menu): Boolean:每次菜單顯示之前被調用(可以修改 menu.findItem(id) 的狀態)。
  • invalidateOptionsMenu()(Activity 方法):通知系統菜單需要刷新(將觸發 onPrepareOptionsMenu())。

示例:

override fun onPrepareOptionsMenu(menu: Menu): Boolean {menu.findItem(R.id.action_settings)?.isVisible = isLoggedInreturn super.onPrepareOptionsMenu(menu)
}

處理菜單點擊

override fun onOptionsItemSelected(item: MenuItem): Boolean {return when (item.itemId) {R.id.action_search -> { /* 處理 */ true }R.id.action_settings -> { startActivity(...) ; true }else -> super.onOptionsItemSelected(item)}
}

返回 true 表示你處理了事件;否則交給父類或系統。

訪問/操作 Menu 與 MenuItem(常用 API)

  • menu.findItem(R.id.some)MenuItem
  • menu.add(int groupId, int itemId, int order, CharSequence title) → 動態添加項
  • menu.removeItem(itemId) → 刪除項
  • menu.setGroupVisible(groupId, boolean) → 整組顯示/隱藏
  • menu.setGroupCheckable(groupId, true, true) → 設置單選/多選行為

MenuItem 常用方法:

  • item.setVisible(boolean)item.setEnabled(boolean)item.setChecked(boolean)
  • item.getActionView() / item.setActionView(view or layoutRes) —— 獲取或設置當作 action view 的自定義視圖(例如 SearchView)
  • item.expandActionView() / item.collapseActionView() —— 展開/收起 action view(如果設置了 collapseActionView

與 Toolbar/ActionBar 的關系

  • 如果你使用 Toolbar 并想讓 it 成為 ActionBar:
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)

之后菜單回調 (onCreateOptionsMenu / onOptionsItemSelected) 不變。顯示與布局由 Toolbar 管理(它會給 Menu 渲染視圖)。

SearchView / actionView 的常見用法

onCreateOptionsMenu() 初始化:

val searchItem = menu.findItem(R.id.action_search)
val searchView = searchItem.actionView as? SearchView
searchView?.setOnQueryTextListener(object: SearchView.OnQueryTextListener {override fun onQueryTextSubmit(query: String): Boolean { doSearch(query); return true }override fun onQueryTextChange(newText: String): Boolean = false
})

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

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

相關文章

【左程云算法03】對數器算法和數據結構大致分類

目錄 對數器的實現 代碼實現與解析 1. 隨機樣本生成器 (randomArray) 2. 核心驅動邏輯 (main 方法) 3. 輔助函數 (copyArray 和 sameArray) 對數器的威力 算法和數據結構簡介?編輯 1. 硬計算類算法 (Hard Computing) 2. 軟計算類算法 (Soft Computing) 核心觀點 一個…

MATLAB | 繪圖復刻(二十三)| Nature同款雷達圖

Hello 真的好久不見&#xff0c;這期畫一個Nature同款雷達圖&#xff0c;原圖是下圖中的i圖&#xff0c;長這樣&#xff1a; 本圖出自&#xff1a; Pan, X., Li, X., Dong, L. et al. Tumour vasculature at single-cell resolution. Nature 632, 429–436 (2024). https://d…

React Hooks UseCallback

開發環境&#xff1a;React Native Taro TypescriptuseCallback的用途&#xff0c;主要用于性能優化&#xff1a;1 避免不必要的子組件重渲染&#xff1a;當父組件重渲染時&#xff0c;如果傳遞給子組件的函數每次都是新創建的&#xff0c;即使子組件使用了 React.memo&#…

使用SD為VFX制作貼圖

1.制作遮罩 Gradient Linear 1 通過Blend 可以混合出不同遮罩 2.徑向漸變 Shape 節點 , 非常常用 色階調節灰度和漸變過渡 曲線能更細致調節灰度 色階還可以反向 和圓盤混合 就是 菲涅爾Fresnel 3. 屏幕后處理漸變 第二種方法 4. 極坐標 Gradient Circular Threshold 閾值節…

面經分享二:Kafka、RabbitMQ 、RocketMQ 這三中消息中間件實現原理、區別與適用場景

一、實現原理 (Implementation Principle) 1. Apache Kafka&#xff1a;分布式提交日志 (Distributed Commit Log) Kafka 的核心設計理念是作為一個分布式、高吞吐量的提交日志系統。它不追求消息的復雜路由&#xff0c;而是追求數據的快速、持久化流動。 存儲結構&#xff1a;…

Android開發——初步了解AndroidManifest.xml

Android開發——初步了解AndroidManifest.xml ? AndroidManifest.xml 是 Android 應用的清單文件&#xff0c;包含了應用的包名、組件聲明、權限聲明、API 版本信息等。它是 Android 應用的“說明書”&#xff0c;系統通過它了解應用的結構和行為。咱們的AndroidManifest文件實…

ecplise配置maven插件

1.下載maven 2.配置系統變量 MAVEN_HOME&#xff1a; E:\CODE\MAVEN\apache-maven-3.0.4 3.配置環境變量 %MAVEN_HOME%\bin 4.cmd&#xff1a;mvn -version 注1 如圖所示為&#xff1a;成功 注1&#xff1a;配置成功的前提是要有配置JAVA_HOME,如果沒有配置&#xff0c;則…

Vue 項目性能優化實戰

性能優化有一套「發現 → 定位 → 解決」的閉環方法論。本文以真實項目為藍本&#xff0c;從編碼階段到上線監控&#xff0c;給出一條可落地的 Vue 性能優化路線圖。 一、量化指標定位性能瓶頸 任何優化之前先用量化證據鎖死問題。 Lighthouse 一鍵跑分&#xff1a;首屏、交互、…

阿里云智能多模態大模型崗三面面經

阿里云智能多模態大模型崗三面面經&#xff08;詳細問題感受&#xff09; 最近面試了 阿里云智能集團 - 多模態大模型崗位&#xff0c;三輪技術面&#xff0c;整體體驗還不錯。問題整體偏常規&#xff0c;但對項目的追問比較細致。這里整理一下完整面經&#xff0c;供準備類似崗…

C++ 條件變量 通知 cv.notify_all() 先釋放鎖再通知

簡短的回答是&#xff1a;先釋放鎖&#xff0c;再通知&#xff08;notify_one 或 notify_all&#xff09;通常是更優的選擇。 雖然標準允許兩種順序&#xff0c;但“先解鎖&#xff0c;后通知”的性能通常更好。 下面我們來詳細解釋原因和兩種方式的區別。 先通知&#xff0c;后…

案例精選 | 南京交通職業技術學院安全運營服務建設標桿

導語 隨著教育信息化的深入推進&#xff0c;高校已成為數字化轉型的前沿陣地。然而&#xff0c;伴隨著教學、科研、管理等業務系統的全面上云與互聯互通&#xff0c;高校網絡環境日益復雜&#xff0c;面臨的網絡安全威脅也愈發嚴峻。勒索病毒、數據泄露、APT攻擊等安全事件頻發…

AI安全必修課:模型偏見檢測與緩解實戰

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;AI偏見——看不見的技術債務 2018年&#xff0c…

Trae + MCP : 一鍵生成專業封面

每日一句 人生只有走出來的美麗&#xff0c; 沒有等出來的輝煌。 目錄 每日一句 前言 一.核心工具與優勢解析 二.操作步驟&#xff1a;從配置到生成廣告封面 前期準備&#xff1a;確認環境與工具版本 第一步. 獲取配置代碼 第二步&#xff1a;在 Trae 中導入 MCP 配置…

Eureka與Nacos的區別-服務注冊+配置管理

Eureka與Nacos的區別-服務注冊配置管理 以下是 Eureka 和 Nacos 的核心區別對比&#xff0c;幫你清晰理解它們的不同定位和特性&#xff1a; ?1. 核心定位? ?Eureka&#xff1a;?? ?純服務注冊與發現中心&#xff0c;源自 Netflix&#xff0c;核心功能是維護服務實例清單…

這才是真正懂C/C++的人,寫代碼時怎么區分函數指針和指針函數?

1.介紹 很多初中級開發者常常在這兩個術語之間感到困惑,分不清它們的定義、語法和應用場景,從而在實際編程中埋下隱患。本文旨在撥開迷霧,從概念定義、語法解析、核心區別及實戰應用四個維度,對函數指針與指針函數進行一次全面、深入的辨析,幫助您徹底厘清這兩個概念,并…

Go基礎(④指針)

簡單示例package mainimport "fmt"func main() {var num int 100var p *int &num // 指向int類型的指針fmt.Println(*p) // 解引用&#xff0c;輸出 100*p 200 // 通過指針修改原變量fmt.Println(num) // 輸出 200 }package mainimport "fmt…

java社交小程序源碼支持APP多端springboot部署與功能模塊詳解

構建一個支持 多端訪問、實時互動、商城交易 的綜合型應用&#xff0c;已成為眾多企業和開發團隊的共同目標。由 寵友信息技術有限公司 打造的 友貓社區&#xff0c;正是基于 Spring Boot 技術棧 的全端解決方案&#xff0c;既能支持 微信小程序、APP、PC管理后臺&#xff0c;又…

代理連接性能優化:提升網絡效率的關鍵技術與實踐

在當今數字化時代&#xff0c;代理連接性能優化已成為網絡架構設計中的關鍵環節。本文將深入探討如何通過技術手段提升代理服務器的響應速度、穩定性和資源利用率&#xff0c;幫助讀者構建高效可靠的代理網絡體系。 代理連接性能優化&#xff1a;提升網絡效率的關鍵技術與實踐 …

Rust 元組

簡介 元組可以由多種類型組成&#xff0c;長度固定。 創建元組 // 固定類型 let tup1: (i32, f64, u8) (500, 8.8, 1);// 不固定類型 let tup2 (500.99, 8.8, 1, 9.99);println!("{}", tup2.0);用模式匹配解構元組 let tup (500.99, 8.8, 1, 9.99); let (x, y…

突破閉集限制:3D-MOOD 實現開集單目 3D 檢測新 SOTA

【導讀】 單目 3D 目標檢測是計算機視覺領域的熱門研究方向&#xff0c;但如何在真實復雜場景中識別“未見過”的物體&#xff0c;一直是個難題。本文介紹的 3D-MOOD 框架&#xff0c;首次提出端到端的開集單目 3D 檢測方案&#xff0c;并在多個數據集上刷新了 SOTA。 目錄 …