android知識總結

Activity啟動模式

standard (標準模式)

?每次啟動該 Activity(例如,通過?startActivity()),系統總會創建一個新的實例,并將其放入調用者(啟動它的那個 Activity)所在的任務棧中。

singleTop (棧頂復用模式)

?如果要啟動的 Activity?已經位于調用者任務棧的棧頂,系統不會創建新實例,而是通過調用該已有實例的?onNewIntent()?方法將新的 Intent 傳遞給它。如果要啟動的 Activity?不在棧頂(即使它存在于棧中但不是棧頂),系統會創建一個新的實例

singleTask (棧內復用模式 / 單任務模式)

?如果在棧中已經存在該 Activity 的實例(無論是否在棧頂),系統會銷毀該實例之上的所有其他 Activity,將這個實例帶到棧頂,并通過?onNewIntent()?傳遞新的 Intent。

singleInstance (單實例模式)

系統會為這個 Activity?創建一個新的任務棧這個新棧中只能有這個 Activity 的實例。?任何其他 Activity(包括它自己再次被啟動)都不能放入這個棧中。

?Intent

它主要用于在 Android 應用組件之間或不同應用之間執行啟動組件、傳遞數據、廣播事件等操作。

顯式 Intent

明確指定了目標組件的完整類名,系統直接將 Intent 遞送給指定的組件,不進行任何查找或過濾

隱式 Intent

請求系統或其他應用執行一個通用操作,或者啟動一個能處理這種操作描述的組件。當發出隱式 Intent 時,Android 系統會將其與設備上所有已安裝應用的組件在?AndroidManifest.xml?中聲明的?<intent-filter>?進行比較。

Android 四大組件

Activity(活動):?一個?Activity?代表應用中的一個屏幕界面。它是用戶與應用交互的主要入口點

Service(服務):?Service?是一種在后臺執行長時間運行操作的組件,沒有用戶界面

BroadcastReceiver(廣播接收器):BroadcastReceiver?是一個負責響應系統或應用內部廣播消息的組件。

ContentProvider(內容提供器):?應用間的數據共享

Activity生命周期

onCreate(Bundle savedInstanceState):?Activity?首次創建時調用。

onStart():Activity 即將變得可見(進入前臺)時調用。

onResume():可以開始與用戶交互時調用。在?onStart()?之后調用,或者在另一個 Activity 離開前臺(如對話框關閉、電話掛斷)后調用。

onPause():?當系統即將啟動另一個 Activity?或當前 Activity 正在失去焦點但仍部分可見(如啟動一個半透明或非全屏的 Activity,如對話框)時調用。

onStop():Activity?對用戶完全不可見時調用。

onRestart():當 Activity 從?Stopped?狀態重新回到前臺時調用。

onDestroy():?Activity?被銷毀之前調用。

Fragment

Fragment 的出現是為了解決 Activity 在構建復雜 UI 和適應多屏幕設備時的局限性。

屏幕旋轉后Activity生命周期變化

用戶首次進入頁面后執行的生命周期回調方法onCreate(),onStart(),onResume()

屏幕旋轉后活動被銷毀并新建,onPause(),onStop(),onDestroy(),onCreate(),onStart(),onResume()。

Android 布局

LinearLayout(線性布局)

子視圖按單一方向(水平/垂直)順序排列。

<LinearLayoutandroid:orientation="vertical" <!-- vertical/horizontal -->>...
</LinearLayout>

?RelativeLayout(相對布局)

通過相對定位確定視圖位置.

FrameLayout(幀布局)

所有子視圖疊加顯示

RecyclerView

RecyclerView 是 Android 中用于高效展示大量數據集的高級視圖容器,通過?ViewHolder?模式減少頻繁的?findViewById()?開銷。

    RecyclerView展示數據的容器視圖
    Adapter將數據綁定到視圖上(核心邏輯)
    ViewHolder緩存視圖組件,避免重復查找
    LayoutManager控制布局排列方式(線性/網格/瀑布流)
    ItemDecoration繪制分割線/間隔樣式

    LiveData

    LiveData?是一種可觀察的數據存儲器類。LiveData?只會將更新通知給活躍的觀察者。

    優點

    數據實時更新LiveData?遵循觀察者模式。當底層數據發生變化時,LiveData?會通知 Observer對象。

    不會發生內存泄漏:觀察者會綁定到Lifecycle對象,并在其關聯的生命周期遭到銷毀后進行自我清理。

    不再需要手動處理生命周期:LiveData?將自動管理所有這些操作。

    MVVM架構

    • View層:Activity/Fragment
    • ViewModel層:Jetpack ViewModel + Jetpack LivaData
    • Model層:Repository倉庫,包含 本地持久性數據 和 服務端數據

    Android 中如何優化性能

    布局優化:避免嵌套過深的布局,使用 ConstraintLayout 替代嵌套布局。

    避免主線程阻塞:將耗時操作放到子線程中。

    自定義view

    當系統提供的標準控件 無法滿足設計或功能要求時,就需要自定義 View。

    生命周期

    [改變可見性] --> 構造View() --> onFinishInflate() --> onAttachedToWindow() --> onMeasure() --> onSizeChanged() --> onLayout() --> onDraw() --> onDetackedFromWindow()

    onFinishInflate(): view從xml加載完成調用。?

    onAttachedToWindow():View 被添加到窗口(Window)時調用。

    onMeasure():確定 View 自身及其子 View(如果是 ViewGroup)的大小。

    onSizeChanged():View 尺寸首次確定或發生變化時。

    onLayout():?確定 View 自身的位置。

    onDraw():將 View 內容繪制到屏幕上。

    SharedPreferences

    是Android平臺上一個輕量級的存儲輔助類,在應用中通常做一些簡單數據的持久化緩存。

    //獲取對象,user為文件名,第二個參數為文件存儲方式(是否允許其他應用讀寫)
    SharedPreferences sharedPreferences = getSharedPreferences("user",MODE_PRIVATE);
    獲取Editor對象的引用
    SharedPreferences.Editor editor = sharedPreferences.edit();
    //數據持久化,共6種類型String,set,int,long,float,booleaneditor.putString("name", "lucas");//獲取數據
    SharedPreferences sharedPreferences= getSharedPreferences("user", MODE_PRIVATE);
    //第二個參數為默認值,即user文件中未找到name,直接返回該值。String name=sharedPreferences.getString("name","");int age = sharedPreferences.getInt("age",0);

    Activity和Activity之間怎么傳遞數據?

    1.通過Intent傳遞數據

    直接使用intent傳遞數據

    // 發送方 Activity,
    Intent intent = new Intent(SenderActivity.this, ReceiverActivity.class);
    //通過putExtra直接發送數據
    intent.putExtra("key_string", "Hello");
    intent.putExtra("key_int", 100);
    intent.putExtra("key_boolean", true);
    startActivity(intent);// 接收方 Activity (onCreate中)
    Intent intent = getIntent();
    //通過getExtra獲取數據
    String text = intent.getStringExtra("key_string");
    int number = intent.getIntExtra("key_int", 0); // 0為默認值
    boolean flag = intent.getBooleanExtra("key_boolean", false);

    傳遞 Bundle 對象

    // 發送方
    Bundle bundle = new Bundle();
    bundle.putString("name", "Alice");
    bundle.putInt("age", 30);Intent intent = new Intent(this, ReceiverActivity.class);
    intent.putExtras(bundle); // 或 intent.putExtra("myBundle", bundle)
    startActivity(intent);// 接收方
    Bundle bundle = getIntent().getExtras(); // 或 getIntent().getBundleExtra("myBundle")
    String name = bundle.getString("name");
    int age = bundle.getInt("age");

    2.通過?SharedPreferences傳遞數據

    第一個Activity中通過SharedPreferences將數據存入xml文件中,再在第二個Activity中通過SharedPreferences獲取數據。

    Fragment與Activity之間的傳值?

    1.在activity中建一個bundle,把要傳的值存入bundle,然后通過fragment的setArguments(bundle)傳到fragment,在fragment中,用getArguments接收

        Bundle bundle=new Bundle();bundle.putString("one","要傳的值");fragment.setArguments(bundle);FragmentManager fm = getFragmentManager();FragmentTransaction ft=fm.beginTransaction();ft.add(R.id.frame,myFragment,"myFragment");ft.commit();Bundle bundle=getArguments();String s=bundle.getString("one");
    

    2.在Fragment中設置set,get方法,通過調用前設置屬性值,完成數據傳遞。

    FragmentManager fm = getFragmentManager();
    MyFragment myFragment = (MyFragment)fm.findFragmentById(R.id.fragment);
    myFragment.setValue("傳值");//Fragment內部private String value;private void setValue(String value){this.value = value;}private String getValue(){return this.value;}

    View和Viewgroup區別?

    View主要用來展示信息或與用戶進行交互;而ViewGroup則更多地作為容器,用來組織和管理一組View或其他ViewGroup。?

    ViewGroup可以包含View和其他ViewGroup;而View只能單獨存在。

    ?

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

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

    相關文章

    第3章 MySQL數據類型

    MySQL數據類型 1、數字數據類型1.1 整數類型1.2 定點類型1.3 浮點類型1.4位值類型1.5 超出范圍和溢出處理1.5.1 超出范圍處理1.5.2 溢出處理 2、日期和時間數據類型3、字符串數據類型3.1 char和varchar類型3.2 binary和varbinary類型3.3 blob 和 text類型3.4 enum類型3.4.1 創建…

    label-studio的使用教程(導入本地路徑)

    文章目錄 1. 準備環境2. 腳本啟動2.1 Windows2.2 Linux 3. 安裝label-studio機器學習后端3.1 pip安裝(推薦)3.2 GitHub倉庫安裝 4. 后端配置4.1 yolo環境4.2 引入后端模型4.3 修改腳本4.4 啟動后端 5. 標注工程5.1 創建工程5.2 配置圖片路徑5.3 配置工程類型標簽5.4 配置模型5.…

    mysql為什么一個表中不能同時存在兩個字段自增

    背景。設置sort自增。會引發錯誤 通常自增字段都是用于表示數據的唯一性。數據庫限制。需要自定義排序字段大小。

    牛客round95D

    原題鏈接&#xff1a;D-小紅的區間修改&#xff08;一&#xff09;_牛客周賽 Round 95 題目背景&#xff1a; 初始擁有一個長度10^100元素全為0的數組&#xff0c;進行q查詢&#xff0c;每次查詢如果區間內的元素都為0就將區間變為首項為 1、公差為 1 的等差數列&#xff1b;否…

    visual studio 2022更改主題為深色

    visual studio 2022更改主題為深色 點擊visual studio 上方的 工具-> 選項 在選項窗口中&#xff0c;選擇 環境 -> 常規 &#xff0c;將其中的顏色主題改成深色 點擊確定&#xff0c;更改完成

    實踐篇:利用ragas在自己RAG上實現LLM評估②

    文章目錄 使用ragas做評估在自己的數據集上評估完整代碼代碼講解1. RAG系統構建核心組件初始化文檔處理流程 2. 評估數據集構建3. RAGAS評估實現1. 評估數據集創建2. 評估器配置3. 執行評估 本系列閱讀&#xff1a; 理論篇&#xff1a;RAG評估指標&#xff0c;檢索指標與生成指…

    微軟PowerBI考試 PL300-在 Power BI 中清理、轉換和加載數據

    微軟PowerBI考試 PL300-在 Power BI 中清理、轉換和加載數據 Power Query 具有大量專門幫助您清理和準備數據以供分析的功能。 您將了解如何簡化復雜模型、更改數據類型、重命名對象和透視數據。 您還將了解如何分析列&#xff0c;以便知曉哪些列包含有價值的數據&#xff0c;…

    PostgreSQL 安裝與配置全指南(適用于 Windows、macOS 與主流 Linux 發行版)

    PostgreSQL 是一個功能強大、開源、穩定的對象關系數據庫系統&#xff0c;廣泛用于后端開發、數據處理與分布式架構中。本指南將手把手教你如何在 Windows、macOS 以及主流 Linux 發行版 上安裝 PostgreSQL&#xff0c;并附上安裝驗證命令與基礎配置方法。 一、Windows 安裝與配…

    WordPress博客文章SEO的優化技巧

    在數字時代&#xff0c;博客不僅用于表達觀點&#xff0c;也能提升品牌影響力并吸引潛在客戶。許多服務器提供商&#xff08;如 Hostease&#xff09;支持 WordPress 一鍵安裝功能&#xff0c;方便新手快速完成安裝&#xff0c;專注于內容創作和 SEO 優化。然而&#xff0c;寫出…

    Python:操作 Excel 折疊

    ??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

    雨季智慧交通:從車輛盲區到客流統計的算法全覆蓋

    雨季智慧交通中的視覺分析技術應用 一、背景&#xff1a;雨季交通的復雜挑戰 雨季是城市交通管理的關鍵考驗期。以濟南為例&#xff0c;強對流天氣伴隨的短時強降水、雷雨大風及冰雹&#xff0c;不僅導致道路積水、能見度驟降&#xff0c;還加劇了大型車輛&#xff08;如渣土…

    安全生產管理是什么?安全生產管理系統都有哪些核心功能?

    隨著法律法規的日益嚴格和公眾對安全意識的提升&#xff0c;企業面臨的安全生產壓力也越來越大。無論是大型企業還是中小型企業&#xff0c;安全生產管理不僅關系到企業的生存與發展&#xff0c;更直接關系到員工的生命安全和企業的社會形象。因此&#xff0c;理解并實施有效的…

    【PyCharm必會基礎】正確移除解釋器及虛擬環境(以 Poetry 為例 )

    #工作記錄 【PyCharm使用基礎】 當遇到虛擬環境難以修復的場景&#xff0c;我們需要刪除當前解釋器和虛擬環境然后再重新創建虛擬環境&#xff0c;以下是在PyCharm中正確移除的步驟。 一、進入解釋器設置 在 PyCharm 界面右下角&#xff0c;點擊Poetry (suna0)&#xff0c;選…

    day028-Shell自動化編程-判斷進階

    文章目錄 1. 特殊變量補充2. 變量擴展-變量子串2.1 獲取變量字符的長度2.2 給變量設置默認值 3. 命令3.1 dirname3.2 basename3.3 cut 4. 條件測試命令&#xff1a;[]4.1 邏輯運算符4.2 文件測試4.3 案例&#xff1a;書寫腳本-檢查文件類型4.4 邏輯運算4.5 案例&#xff1a;書寫…

    oracle sql 語句 優化方法

    1、表盡量使用別名&#xff0c;字段盡量使用別名.字段名&#xff0c;這樣子&#xff0c;可以減少oracle數據庫解析字段名。而且把 不需要的字段名剔除掉&#xff0c;只保留有用的字段名&#xff0c;不要一直使用 select *。 2、關聯查詢時&#xff0c;選擇好主表 。oracle解析…

    【Java】Ajax 技術詳解

    文章目錄 1. Filter 過濾器1.1 Filter 概述1.2 Filter 快速入門開發步驟:1.3 Filter 執行流程1.4 Filter 攔截路徑配置1.5 過濾器鏈2. Listener 監聽器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技術3.1 Ajax 概述3.2 Ajax 快速入門服務端實現:客戶端實現:4. Axi…

    07 APP 自動化- appium+pytest+allure框架封裝

    文章目錄 一、PO二、代碼簡單實現項目框架預覽&#xff1a;base_page.pydir_config.pyget_data.pylogger.pystart_session.pyconfig.yamlkey_code.yamllaunch_page_loc.pylogin_page_loc.pylaunch_page.pylogin_page.pytest_login.pypytest.inirun.py APP 自動化代碼總和 一、P…

    用戶體驗升級:表單失焦調用接口驗證,錯誤信息即時可視化

    現代前端應用中&#xff0c;表單交互是用戶體驗的重要組成部分。而表單驗證作為其中的核心環節&#xff0c;不僅需要前端的即時反饋&#xff0c;還需要與后端接口聯動進行數據合法性校驗。本文將詳細介紹如何在Vue3中實現表單輸入與接口驗證的無縫聯動&#xff0c;并優雅地展示…

    Vue 插槽(Slot)用法詳解

    插槽(Slot)是Vue中一種強大的內容分發機制&#xff0c;它允許你在組件中定義可替換的內容區域&#xff0c;為組件提供了更高的靈活性和可復用性。本文將全面介紹Vue插槽的各種用法。 1. 基本插槽 基本插槽是最簡單的插槽形式&#xff0c;它允許父組件向子組件插入內容。 子組…

    C++ 標準模板庫(STL)詳解文檔

    C 標準模板庫&#xff08;STL&#xff09;詳解文檔 1 前言2 常用容器2.1 內容總覽2.2 向量 vector2.2.1 概述2.2.2 常用方法2.2.3 適用場景2.2.4 注意事項 2.3 棧 stack2.3.1 概述2.3.2 常用方法2.3.3 注意事項 2.4 隊列 queue2.4.1 概述2.4.2 常用方法2.4.3 注意事項 2.5 優先…