Android Activity 設計詳解

文章目錄

    • Android Activity 設計說明
      • 1. `Activity` 的生命周期
      • 2. `Activity` 的啟動模式
      • 3. `Activity` 的通信
      • 4. `Activity` 的布局和視圖管理
      • 5. `Activity` 的配置變化處理
      • 6. `Activity` 的保存和恢復狀態
      • 7. `Activity` 的任務和返回棧
    • 總結

Android Activity 設計說明

在 Android 中,Activity 是一個應用程序組件,提供一個屏幕供用戶進行交互。每個 Activity 負責管理用戶界面的一個獨立部分,并處理用戶的交互。下面是 Activity 的設計及其關鍵部分的詳細說明。

1. Activity 的生命周期

Activity 的生命周期方法用于管理其狀態轉換。主要的生命周期方法有:

  • onCreate(Bundle savedInstanceState): Activity 被創建時調用。在這里進行初始化,如設置布局、初始化組件等。
  • onStart(): Activity 即將可見時調用。
  • onResume(): Activity 即將開始與用戶交互時調用。
  • onPause(): 系統即將啟動另一個 Activity 時調用。用于保存狀態和釋放資源。
  • onStop(): Activity 不再可見時調用。通常用于釋放資源。
  • onDestroy(): Activity 被銷毀前調用。用于清理資源。
  • onRestart(): Activity 從停止狀態再次啟動前調用。

這些方法幫助 Activity 管理其狀態并與用戶進行交互。

2. Activity 的啟動模式

Android 提供了幾種不同的啟動模式,用于定義 Activity 的啟動行為。主要有以下幾種:

  • standard: 每次啟動 Activity 都會創建一個新的實例。
  • singleTop: 如果當前任務的棧頂已經有該 Activity 實例,則重用該實例,否則創建新的實例。
  • singleTask: 在棧中只保留一個 Activity 實例,如果實例存在,則將其置于棧頂。
  • singleInstance: 創建一個單獨的任務棧來管理該 Activity,并且在該任務棧中只存在這一個 Activity 實例。

啟動模式在 AndroidManifest.xml 中通過 android:launchMode 屬性進行配置。

3. Activity 的通信

Activity 可以通過 Intent 進行通信。Intent 是一個消息對象,用于在不同的組件(如 ActivityService)之間傳遞數據。啟動另一個 Activity 的基本方式如下:

Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

接收數據的 Activity 可以在 onCreateonNewIntent 方法中處理傳遞過來的 Intent

Intent intent = getIntent();
String value = intent.getStringExtra("key");

4. Activity 的布局和視圖管理

Activity 通過 setContentView 方法設置其布局:

setContentView(R.layout.activity_main);

布局文件(如 activity_main.xml)定義了該 Activity 的用戶界面。可以通過 findViewById 方法獲取視圖并進行操作:

Button button = findViewById(R.id.my_button);
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// Handle button click}
});

5. Activity 的配置變化處理

當設備配置發生變化(如屏幕旋轉、鍵盤可用性變化等)時,Activity 會被銷毀并重新創建。可以通過在 AndroidManifest.xml 中配置 android:configChanges 屬性,告知系統在特定配置變化時不銷毀 Activity,而是調用 onConfigurationChanged 方法:

<activity android:name=".MainActivity"android:configChanges="orientation|screenSize|keyboardHidden">
</activity>

Activity 中覆蓋 onConfigurationChanged 方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// Handle configuration changes
}

6. Activity 的保存和恢復狀態

為了在配置變化或其他情況下保存和恢復 Activity 的狀態,可以使用 onSaveInstanceStateonRestoreInstanceState 方法:

@Override
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("key", "value");
}@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);String value = savedInstanceState.getString("key");
}

7. Activity 的任務和返回棧

Android 使用任務和返回棧(Back Stack)來管理 Activity 的導航。每個任務由一個棧(返回棧)來管理 ActivityActivity 被啟動時,會被添加到任務的返回棧中。用戶按下返回按鈕時,系統會從返回棧中彈出當前的 Activity 并顯示前一個 Activity

總結

Activity 是 Android 應用程序的核心組件之一,負責管理用戶界面和用戶交互。通過生命周期方法、啟動模式、視圖管理、配置變化處理和任務管理,Activity 提供了豐富的功能來構建和管理復雜的應用程序界面。了解和掌握 Activity 的設計和使用,對于開發高效和響應迅速的 Android 應用程序至關重要。

歡迎點贊|關注|收藏|評論,您的肯定是我創作的動力

在這里插入圖片描述

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

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

相關文章

Ansible01-Ansible的概述、實驗環境初始化、Inventory

目錄 寫在前面1. Ansible是什么1.1 簡介與來歷1.2 Ansible的特點1.3Ansible的架構與工作流程1.3.1 ansible 任務執行模式1.3.2 ansible 執行流程1.4 Ansible的模塊 2. Ansible實驗初始化2.1 實驗環境2.2Ansible的安裝2.2.1 Ansible的程序結構 2.3 修改Ansible配置文件2.3.1 配置…

【408精華知識】頁、頁面、頁框、頁幀、內存塊、物理塊、物理頁面還傻傻分不清?

在做題過程中&#xff0c;我們經常能看到頁、頁框、塊等概念&#xff0c;初接觸時&#xff0c;常感覺傻傻分不清&#xff0c;這篇文章將簡潔地介紹它們之間的聯系與區別。 這些概念之間的根本區別&#xff0c;在于是物理上的概念還是邏輯上的概念&#xff0c;也即是虛地址還是實…

匯聚榮:新手做拼多多應該注意哪些事項?

新手在拼多多開店&#xff0c;面臨的是競爭激烈的市場和復雜的運營規則。要想在這個平臺上脫穎而出&#xff0c;必須注意以下幾個關鍵事項。 一、市場調研與定位 深入了解市場需求和競爭對手情況是新手開店的首要步驟。選擇有潛力的細分市場&#xff0c;并針對目標消費者群體進…

華為云服務培訓

一、存儲類服務實踐 是什么&#xff1a; 云硬盤( Elastic Volume Service )是一種為 ECS&#xff08;彈性云服務器&#xff09;、BMS&#xff08;裸金屬服務器&#xff09; 等計算服務提供持久性存儲的服務。 作用&#xff1a; 它通過數據冗余和緩存加速等多項技術&#xf…

卷積報錯:AttributeError: ‘Conv2d‘ object has no attribute ‘total_ops‘ (已解)

AttributeError: ‘Conv2d’ object has no attribute ‘total_ops’ File "/home/...../..._encoder.py", line 34, in forwardx = self.conv(x)File "/home/...../python3.8/site-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_im…

Spring系列-03-BeanFactory和Application接口和相關實現

BeanFactory BeanFactory和它的子接口們 BeanFactory 接口的所有子接口, 如下圖 BeanFactory(根容器)-掌握 BeanFactory是根容器 The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such …

windows 11上自帶時間管理-番茄工作法

在 Windows 11 中&#xff0c;你可以使用 專注 功能來最大程度地減少干擾&#xff0c;幫助你保持專注。 專注的工作原理 專注時段打開后&#xff0c;將會出現以下情況&#xff1a; 專注計時器將顯示在屏幕上 請勿打擾將打開 任務欄中的應用不會閃爍發出提醒 任務欄中應用的…

內網穿透原理解析

在互聯網信息時代的今天&#xff0c;我們經常會聽到“內網穿透”&#xff0c;卻有很多人對此并不了解&#xff0c;下面小編給大家介紹一下內網穿透的工作原理。 1. 什么是內網穿透? 在了解內網穿透原理之前&#xff0c;我們先說什么是內網穿透。內網&#xff0c;就是在公司或…

SpringCloud系列(23)--手寫實現負載輪詢算法

前言&#xff1a;在上一篇文章中我們介紹了關于負載輪詢算法的原理以及看了源代碼&#xff0c;而本章節內容則是著重于我們自己手寫一個負載輪詢算法 1、分別編寫provider-payment8001、provider-payment8002這兩個子項目的PaymentController類&#xff0c;增加一個/payment/lb…

C++中引用的全面解析與實戰應用

C中的引用作為一種強大的特性&#xff0c;不僅能夠提升代碼的效率和清晰度&#xff0c;還能在一定程度上保障數據的安全性。本文將深入探討引用的各個方面&#xff0c;包括其定義、使用場景、類型、與指針的區別&#xff0c;并通過實例加以說明。 引用的定義與基本概念 引用可…

探究Python中的元組:不可變性與多重用途

元組是 Python 中的另一種重要數據結構&#xff0c;與列表相似&#xff0c;但具有一些關鍵區別。讓我們來詳細了解一下 Python 中的元組&#xff0c;包括基本語法、常用命令、示例代碼、應用場景、注意事項和總結。 基本語法 創建元組 在 Python 中&#xff0c;元組使用圓括…

Py之llama-parse:llama-parse(高效解析和表示文件)的簡介、安裝和使用方法、案例應用之詳細攻略

Py之llama-parse&#xff1a;llama-parse(高效解析和表示文件)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 llama-parse的簡介 llama-parse的安裝和使用方法 1、安裝 2、使用方法 第一步&#xff0c;獲取API 密鑰 第二步&#xff0c;安裝LlamaIndex、LlamaParse L…

AI爆文寫作:經常做這四個小練習,讓你解鎖爆文標題的秘籍,讓你的標題炸裂吸晴!

文章目錄 一、無法吸引眼球的標題二、標題炸裂的秘籍練習1:洞察受眾的渴望與恐懼。練習2:運用感官語言,用生動的描述和具體細節,在讀者心中勾勒出一幅畫面。練習3:展示變化。練習4:用意外轉折激發好奇心。一、無法吸引眼球的標題 這樣的標題: [如何通過閱讀改變人生」「…

LeetCode 1542.找出最長的超贊子字符串:前綴異或和(位運算)

【LetMeFly】1542.找出最長的超贊子字符串&#xff1a;前綴異或和&#xff08;位運算&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-longest-awesome-substring/ 給你一個字符串 s 。請返回 s 中最長的 超贊子字符串 的長度。 「超贊子字符串」需…

<string.h>中部分庫函數的模擬實現

前言 嗨&#xff0c;我是firdawn&#xff0c;本章將簡單介紹&#xff0c;<string.h>中部分庫函數的模擬實現&#xff0c;如strncpy&#xff0c;strncat&#xff0c;memcpy&#xff0c;memmove。在本文片末&#xff0c;還講簡單介紹判斷機器大小端的函數實現&#xff0c;…

VSCode SAP Systems配置HTTPS訪問SAP

第一次訪問提示&#xff0c;Self-Signed 證書 解決辦法&#xff1a;https訪問SAP Fiori網站&#xff0c;導出SSL證書為DER格式保存到硬盤上 雙擊DER文件&#xff0c;導入到系統 退出VSCode&#xff0c;再次啟動 Test Connection, 提示 The system URL is using a hostname …

服務器攻防-中間件安全,weblogic(沒怎么搞懂)

1.weblogic-工具 jboss 1.弱口令 直接輸入admin就就去了 2.反序列化&#xff08;不是很懂java) jenkins glassfish 讀密碼文件 讀取 就可以知道它的密碼 我們就可以寫腳本

使用DataGrip連接跳板機后再連接遠程服務器的mysql數據庫

相比配置本地數據庫就是多了一步SSH/SSL配置。 添加新的mysql連接&#xff0c;選擇SSH/SSL&#xff0c;勾選Use SSH tunnel&#xff1a; 點擊右邊的…配置跳板機連接&#xff0c;輸入賬號密碼&#xff0c;然后保存&#xff1a; 接著配置General&#xff0c;里面填上要連接的數…

一款數字化管理平臺源碼:云MES系統(附架構圖、流程)技術架構:springboot + vue-element-plus-admin

制造生產企業打造數字化生產管控的系統&#xff0c;從原材料、生產報工、生產過程、質檢、設備、倉庫等整個業務流程的管理和控制&#xff0c;合理安排生產計劃、實時監控生產、優化生產工藝、降低不良產出和運營成本&#xff1b; 技術架構&#xff1a;springboot vue-elemen…

DHT11獲取數據傳輸到PC端

1.DHT11的時序數據 a : dht 1 b &#xff1a;dht 0延時30ms c&#xff1a; dht 1 卡d點&#xff1b;while(dht1); 卡e點 while(!dht) 卡f點&#xff1a;while(dht) 卡g點&#xff1a;while(!dht) 有效數據都是高電平&#xff0c;持續時間不一樣&#xff0c;50us讀&#…