偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Android開發(fā)入門:四大組件之Activities

移動開發(fā) Android
本文介紹了作為Android開發(fā)四大組件之一的Activity,從定義到如何創(chuàng)建,到生命周期的管理,是學(xué)習(xí)Android開發(fā)入門的好資料。

1、定義

Activity是為用戶提供可視化界面并可以與用戶交互的組件。

2、概述

應(yīng)用程序通常是多個松散并相互綁定的Activity組成。一般,用戶***啟動應(yīng)用時,將啟動一個被指定為main的Activity。每個Activity都可以啟動另一個Activity,以執(zhí)行不同的動作。每次啟動一個新的Activity,以前的Activity停止,但在系統(tǒng)堆棧保留Activity(“回棧”)。一個新的Activity啟動時,它將當(dāng)前Activity壓到棧里面并取得用戶的焦點?;囟褩W袷鼗镜?ldquo;后進先出”的堆棧機制。當(dāng)用戶在當(dāng)前Activity,按下返回按鈕,則當(dāng)前彈出堆棧(并銷毀)和恢復(fù)以前的Activity。

Activity停止是因為一個新的Activity開始,通過活動的生命周期回調(diào)方法,通知這種狀態(tài)發(fā)送變化。一個Activity可能會收到多個回調(diào) 方法,當(dāng)狀態(tài)發(fā)生變化時.產(chǎn)生,停止,恢復(fù),銷毀,這些回調(diào)在適當(dāng)?shù)臅r機提供給您做相應(yīng)工作的機會。例如,停止時,你的Activity應(yīng)該釋放大型對 象,如網(wǎng)絡(luò)或數(shù)據(jù)庫連接?;謴?fù)Activity時,你可以重新獲得必要的資源和恢復(fù)被中斷的Activity。這些狀態(tài)轉(zhuǎn)換是所有的Activity程序 周期的一部分。

3、創(chuàng)建Activity

a. 概述

要生成一個Activity,你必須生成一個Activity子類Activity(或已有的子類)。在你的子類中,創(chuàng)建,停止,恢復(fù)或銷毀 Acitivty時,你需要實現(xiàn)回調(diào)方法,系統(tǒng)調(diào)用時,用這些方法在Activity生命周期的各種狀態(tài)之間的轉(zhuǎn)換。兩個最重要的回調(diào)方法是:

onCreate():必須實現(xiàn)這個方法。生成Activity時系統(tǒng)調(diào)用。在你實現(xiàn)中,你應(yīng)該初始化您的Activity中的組件。最重要的是,這是你必須調(diào)用 setContentView() 定義Activity的用戶界面的布局。

onPause():當(dāng)用戶離開你的Activity時候(盡管它并不總是意味著被銷毀Activity),系統(tǒng)調(diào)用此方法。通常如果你需要保持當(dāng)前會話的話,你所有的改動都應(yīng)在這提交(因為用戶可能不返回)。

還有其他幾個生命周期回調(diào)方法,你應(yīng)該使用這些方法處理Activity與導(dǎo)致使Activity必須停止,甚至銷毀的突發(fā)中斷之間的事情,來提供流暢的用戶體驗。所有的生命周期回調(diào)方法將在稍后討論,在有關(guān) 管理Activity生命周期部分。

b. 實現(xiàn)用戶界面

一個Activity的用戶界面是由一組按層派生視圖類-View的視圖對象組成。每個視圖控制Activity窗口的特定矩形空間,以響應(yīng)用戶交互。例如,一個視圖可能是一個按鈕,當(dāng)用戶觸摸它啟動一個操作。

Android提供了一些現(xiàn)成的視圖,你可以用它來​​設(shè)計和組織布局。“Widgets”就是視圖-view,他提供一個可視的可交互的屏幕元素,如按鈕,文本字段,復(fù)選框,或只是一個圖象。“布局”是從視圖組-ViewGroup派生的,提供了對子視圖特殊的布局模式,如線性布局,網(wǎng)格布局,或相對布局的視圖組。還可以繼承視圖類-View和視圖組 - ViewGroup(或現(xiàn)有的子類)來創(chuàng)建自己的Widgets和布局,并將其應(yīng)用到您的Activity布局中。

最常見的方式來定義一個布局,是一個XML布局文件保存您的應(yīng)用程序資源。這種方式,你可以單獨從源代碼中維護你的用戶界面設(shè)計以及定義Activity 的行為。你可以通過setContentView()設(shè)置您的Activity的UI布局 ,傳入布局的資源ID。或者,你也可以在Activity代碼中生成新的視圖-View,新建立一個視圖 - View層次結(jié)構(gòu)插入到視圖組-ViewGroup ,然后傳入根視圖組-ViewGroup給setContentView()進行布局。

c. 在manifest文件中聲明Activity

   要在系統(tǒng)中使用Activity,您必須在manifest文件中聲明您的Activity。打開你的manifest文件,并添加 <activity-element>>作為 <application><application> 元素一個子元素。例如:

  1. <manifest ... >   
  2.    <application ... >   
  3.        <activity android:name=".ExampleActivity" />   
  4.        ...   
  5.    </application ... >   
  6.    ...   
  7. </manifest >   

在這個元素可以包含其他一些屬性,包括定義屬性,如Activity的標(biāo)簽,圖標(biāo)的Activity,或Activity的主題UI風(fēng)格。 屬性android:name 是唯一需要的屬性,它指定Activity的類名。一旦你發(fā)布你的應(yīng)用程序,你不應(yīng)該改變這個名字,因為如果這樣做,你可能會破壞一些功能,如應(yīng)用程序的快捷方式。

d. 使用intent過濾器

一個 <activity> 元素也可使用 <intent-filter>的元素指定的各種intent過濾器,以說明其他應(yīng)用程序組件可以如何激活它。

當(dāng)你使用Android SDK工具為您創(chuàng)建一個新的應(yīng)用,<activity>標(biāo)簽下自動包括用于聲明Activity響應(yīng)main的動作的intent過濾器和用于啟動的lancher分類。intent 過濾器看起來像這樣:

  1. <activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">   
  2.     <intent-filter>   
  3.         <action android:name="android.intent.action.MAIN" />   
  4.         <category android:name="android.intent.category.LAUNCHER" />   
  5.     </intent-filter>   
  6. </activity>  

<action> 元素指定應(yīng)用程序main的入口。 <category> 元素指定系統(tǒng)的activity列表上應(yīng)用啟動的Activity,(允許用戶啟動這個Activity)。

如果你打算讓您的應(yīng)用程序成為一個獨立的應(yīng)用,不允許其他應(yīng)用程序啟動應(yīng)用中的Activity,那你就不需要其他的intent過濾器。 如前面示例所示,只有一個Activity帶有main動作和launcher類別。你 不讓其他Activity用于其他應(yīng)用程序,那他們不應(yīng)有任何intent過濾器,你必須顯示的調(diào)用intent啟動他們。

但是,如果您希望您的 Activity響應(yīng)其他應(yīng)用程序(和自己)的隱式intent,那么你必須在您的Activity中定義額外的intent過濾器。為了響應(yīng)你需要響應(yīng) 的每種intent,你必須包括 <intent-filter> ,其中包括一個 <action> 元素的和一個可選的 <category> 元素和/或 <data> 元素。這些元素指定你的Activity可以響應(yīng)的intent類型。

4、啟動Activity

你就可以通過調(diào)用 startActivity(android.content.Intent) startActivity()啟動另一個Activity,它傳遞一個Intent描述你要啟動的Activity。intent指定你要啟動的 Activity,或描述要執(zhí)行的動作類型(系統(tǒng)為您選擇合適的Activity,甚至可能是他應(yīng)用程序的Activity)。intent也可攜帶少量 數(shù)據(jù)被用于要啟動的Activity。

在自己的應(yīng)用程序中,你會經(jīng)常需要簡單地啟動一個已知的Activity。你可以使用類名來創(chuàng)建一個intent,明確定義你要啟動的Activity。另 外,您的應(yīng)用程序可能還需要執(zhí)行一些動作,例如發(fā)送電子郵件,文字信息,或狀態(tài)更新,使用Activity中的數(shù)據(jù)。在這種情況下,你的應(yīng)用程序可能無法 有其自身的Activity,執(zhí)行這些行動,所以你可以轉(zhuǎn)而利用設(shè)備上其他應(yīng)用程序提供的Activity為您執(zhí)行。這是intent真正有價值的地方 ——你可以創(chuàng)建一個描述了要執(zhí)行的一個動作的intent,系統(tǒng)從另一個應(yīng)用程序啟動的適當(dāng)Activity。

如果有多個Activity可以處理的intent,那么用戶可以選擇使用哪一個。例如,如果你想允許用戶發(fā)送電子郵件,你可以創(chuàng)建以下intent:

  1. Intent intent = new Intent(Intent.ACTION_SEND); 
  2. intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); 
  3. startActivity(intent); 

a. 啟動activity的返回結(jié)果

有時,您要取得你啟動的Activity的結(jié)果。使用Activity的startActivityForResult()。然后在后續(xù)實現(xiàn)了 onActivityResult()回調(diào)方法的Activity中取得結(jié)果。后續(xù)Activity完成后,它會返回一個intent給您 onActivityResult()方法。

  1. private void pickContact() { 
  2.     / /根據(jù)CONTENT PROVIDER URI定義,建議一個用于選擇聯(lián)系人得 INTENT 
  3.        Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
  4.     startActivityForResult(intent, PICK_CONTACT_REQUEST); 
  5.  } 
  6.   
  7.  @Override 
  8.  protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
  9.     / /如果請求正常(OK)并且請求是PICK_CONTACT_REQUEST  
  10.      if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { 
  11.         / /查詢 content provider 取得聯(lián)系人的名字  
  12.         Cursor cursor = getContentResolver().query(data.getData(), 
  13.         new String[] {Contacts.DISPLAY_NAME}, nullnullnull); 
  14.         if (cursor.moveToFirst()) { // 游標(biāo)不為空 
  15.             int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); 
  16.             String name = cursor.getString(columnIndex); 
  17.             // 對選中名字的人進行處理... 
  18.         } 
  19.     } 
  20.  } 

5、關(guān)閉Actvity

您可以通過調(diào)用 finish()方法關(guān)閉Activity的。你也可以通過調(diào)用 finishActivity()關(guān)閉之前您啟動的一個獨立的Activity 。注意:在大多數(shù)情況下,你應(yīng)該不需要顯示地使用這些方法結(jié)束Activity。在下面一節(jié)討論有關(guān)的Activity生命周期,Android系統(tǒng)為你管理Activity, 所以你不需要來自己結(jié)束Activity。調(diào)用這些方法可對用戶體驗產(chǎn)生影響,只有你確定不想讓用戶返回此Activity實例時使用。

6、管理Activity生命周期

a. 實現(xiàn)生命周期函數(shù)

activity_lifecycle.png

b. 保存activity狀態(tài)

恢復(fù)狀態(tài):在管理Activity生命周期中提到當(dāng)Activity暫?;蛘咄V沟臅r候,會保留Activity狀態(tài)。因為當(dāng)他暫?;蛘咄V沟臅r候,內(nèi)存中 仍然有 Activity 對象,并且包含成員信息和當(dāng)前的狀態(tài),因此,在用戶模式下的任何對Activity的操作,在Activity返回到前臺的時候?qū)⒈贿€原("恢復(fù)狀態(tài)")。

重新運行狀態(tài):在Activity變得不太穩(wěn)定的前,系統(tǒng)調(diào)用 onSaveInstanceState() 。該系統(tǒng)傳遞給其一個 Bundle,您可以在其中以名稱-值對的形式保存為有關(guān)Activity的狀態(tài)信息,如使用方法 putString()和 putInt() 。然后,如果系統(tǒng)kill你的應(yīng)用進程,當(dāng)用戶返回Activity,系統(tǒng)重建Activity時,系統(tǒng)會同時傳給 onCreate() 和 onRestoreInstanceState() Bundle 。

使用這兩種方法,你可以從 Bundle 提取到保存的狀態(tài)信息來恢復(fù)Activity。如果沒有恢復(fù)的狀態(tài)信息, Bundle傳遞的是空(***創(chuàng)建Activity的情況)。由于onSaveInstanceState() 的默認實施能保存UI的狀態(tài),如果要為保存額外的狀態(tài)信息而重寫此方法,那么在做任何工作之前,你一定要在實現(xiàn) onSaveInstanceState() 之前調(diào)用其超類方法。

同樣,如果你重寫它,你也應(yīng)該調(diào)用 onRestoreInstanceState()實現(xiàn)的超類方法,以此默認實現(xiàn)恢復(fù)視圖狀態(tài)。因為 onSaveInstanceState() 不能保證被調(diào)用,所以當(dāng)用戶離開Activity,你應(yīng)該只使用它記錄Activity的瞬時狀態(tài)(UI的狀態(tài)),你不應(yīng)該用它來​​存儲持久數(shù)據(jù)。相 反,你應(yīng)該使用 onPause() 存儲持久數(shù)據(jù)(如保存到數(shù)據(jù)庫中的數(shù)據(jù))。

    restore_instance.png

c. 處理配置改變

    某 些設(shè)備配置在運行時可以改變(如屏幕方向,鍵盤的可用性,和語言)。當(dāng)這種變化發(fā)生時,Android重新運行Activity(系統(tǒng)調(diào)用的 onDestroy(),然后立即調(diào)用的 onCreate())。這種行為旨在幫助您用您所提供的(如不同的屏幕方向和大小不同的布局)的替代資源進行應(yīng)用程序自動重載,以適應(yīng)新的配置。如果你 正確地設(shè)計Activity,以處理由于屏幕方向的變化帶來的重新啟動并按照如上所述恢復(fù)Activity狀態(tài),那么您的應(yīng)用程序在Activity生命 周期中對于其他突發(fā)事件的應(yīng)對將更具彈性。處理重新啟動來保存和恢復(fù)Activity狀態(tài)的一個的***方式是使用onSaveInstanceState()和onRestoreInstanceState()(或onCreate())。

7、協(xié)調(diào)Activities

   在同一進程中兩個Activity中,當(dāng)Activity A 啟動Acivity B是產(chǎn)生的操作順序:

1.Activity A執(zhí)行onPause()方法;

2.Activity B按照onCreate(),OnStart(),onResume()的順序執(zhí)行方法。(ActivityB現(xiàn)在取得用戶的焦點。)

3.如果ActivityA已不再是顯示在屏幕上,它執(zhí)行方法onStop()。

這個可預(yù)測的生命周期回調(diào)順序,可讓您管理的從一個Activity到另一個Activity的轉(zhuǎn)換信息。例如,如果***個Activity停止時你必須寫數(shù)據(jù)庫 , 讓之后的Activity讀取數(shù)據(jù)庫,那么你應(yīng)該在onPause()期間寫數(shù)據(jù)庫而不是onStop()。

責(zé)任編輯:徐川 來源: csdn
相關(guān)推薦

2016-12-09 09:23:50

android組件Service

2014-03-27 15:34:55

Android組件Activity

2014-07-31 10:57:15

Android組件Service

2014-03-27 15:57:45

Android組件Activity

2010-08-05 10:22:46

Flex效果

2013-01-17 15:51:42

Android開發(fā)應(yīng)用程序組件

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2010-09-15 13:35:25

SwingHibernateStruts

2012-02-08 13:52:30

云計算

2010-08-17 09:20:28

DIV布局

2010-11-03 11:10:04

AndroidiPhone

2024-02-22 14:04:04

開發(fā)框架

2014-12-17 10:43:01

Hybrid App平臺開發(fā)

2022-03-16 23:17:57

React JS前端工具

2011-03-21 09:01:49

CSS框架

2024-12-30 11:24:56

APMZipkinPinpoint

2010-09-01 11:01:02

iUIjQTouchSencha Touc

2009-08-28 10:47:46

Java EE容器

2015-10-22 10:48:47

Android四大組件攔截

2013-09-24 10:32:31

Android開發(fā)者工具
點贊
收藏

51CTO技術(shù)棧公眾號