Android元件之Activity講解
在Android系統中activity提供視覺化的使用者介面,一個Android應用通常由多個activity組成。多個activity組成了Activity棧,當前活動的Activity處於棧頂。Activity有自己的生命週期,由Android系統來控制。
1、Activity狀態
一般認為Activity有以下四種狀態:
活動的:當一個Activity在棧頂,它是可視的、有焦點、可接受使用者輸入的。Android試圖盡最大可能保持它活動狀態,殺死其它Activity來確保當前活動Activity有足夠的資源可使用。當另外一個Activity被啟用,這個將會被暫停。
暫停:在很多情況下,你的Activity可視但是它沒有焦點,換句話說它被暫停了。有可能原因是一個透明或者非全屏的Activity被啟用。在極特殊的情況下,Android將會殺死一個暫停的Activity來為活動的Activity提供充足的資源。當一個Activity變為完全隱藏,它將會變成停止。
停止:當一個Activity不是可視的,它“停止”了。這個Activity將仍然在記憶體中儲存它所有的狀態和會員資訊。儘管如此,當其它地方需要記憶體時,它將是最有可能被釋放資源的。當一個Activity停止後,一個很重要的步驟是要儲存資料和當前UI狀態。一旦一個Activity退出或關閉了,它將變為待用狀態。
銷燬:被系統或程序結束。
2、Activity的建立
建立一個Activity介面一般是繼承Activity類(當然也可以繼承ListActivity、MapActivity等),覆蓋Activity類的onCreate方法,在該方法中呼叫setContentView()方法展示要顯示的檢視,然後呼叫findViewById()方法例項化元件。注意的是必須在AndroidManifest.xml清單檔案中宣告Activity名稱才能使用。
下面程式碼演示了在MainActivity中新增LinearLayout佈局檢視,在該檢視中新增一個按鈕和一個文字框,覆蓋Activity的onCreate()方法,在該方法中呼叫setContentView()方法展示要顯示的檢視,並呼叫findViewById()方法例項化元件。
佈局檔案程式碼如下所示:public class MainActivity extends Activity { private static final String TAG = "lifecycle"; private Button btnButton; private TextView tvtitle; //建立時呼叫 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設定當前Activity介面佈局 setContentView(R.layout.main); //通過findViewById方法獲得Button例項 tvtitle = (TextView) findViewById(R.id.btnButton); //通過findViewById方法獲得Button例項 btnButton = (Button) findViewById(R.id.btnButton); } }
<?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"
android:orientation="vertical" >
<TextView
android:id="@+id/tvtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="簡單的Activity建立"
/>
<Button
android:id="@+id/btnButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按鈕"/>
</LinearLayout>
Manifest.xml清單檔案程式碼如下:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 宣告Activity -->
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
執行結果如下: 3、啟動另一個Activity
像我們做Web開發一樣,經常會從一個頁面跳轉到另一個頁面。在Android中我們也經常會從一個Activity跳轉到另一個Activity做出一些處理。從一個Activity啟動另一個Activity可以使用startActivity方法或者startActivityForResult()方法。這兩個方法要傳遞的引數是Android中的另外一個非常重要的元件Intent,Intent是相同或不同元件間的信使。
下面程式碼有兩個Activity:FirstActivity和SecondActivity。每個Activity中放置一個按鈕,FirstActivity中的按鈕響應事件跳轉到SecondActivity,SecondActivity中的按鈕響應事件跳轉到FirstActivity。
//FirstActivity.java
public class FirstActivity extends Activity {
private Button btnButton;
private TextView tvtitle;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.main);
//通過findViewById方法獲得Button例項
tvtitle = (TextView) findViewById(R.id.tvtitle);
//通過findViewById方法獲得Button例項
btnButton = (Button) findViewById(R.id.btnButton);
tvtitle.setText("這是FirstActivity");
btnButton.setText("切換到SecondActivity");
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//顯示方式宣告Intent,直接啟動SecondActivity
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//啟動Activity
startActivity(intent);
}
});
}
}
//SecondActivity.java
public class SecondActivity extends Activity {
private static final String TAG = "lifecycle";
private Button btnButton;
private TextView tvtitle;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.main);
//通過findViewById方法獲得Button例項
tvtitle = (TextView) findViewById(R.id.tvtitle);
//通過findViewById方法獲得Button例項
btnButton = (Button) findViewById(R.id.btnButton);
tvtitle.setText("這是SecondtActivity");
btnButton.setText("切換到FirstActivity");
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//顯示方式宣告Intent,直接啟動SecondActivity
Intent intent = new Intent(SecondActivity.this,FirstActivity.class);
//啟動Activity
startActivity(intent);
}
});
}
}
Manifest.xml清單檔案程式碼如下:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 宣告FirstActivity -->
<activity
android:name=".FirstActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 宣告SecondtActivity -->
<activity android:name=".SecondActivity"></activity>
</application>
執行結果如下: 4、Activity之間傳遞引數
在Web開發中我們經常把資料放在某個Scope中(如request、session)來實現資料共享。在Android系統中不同的Activity之間又是如何傳遞資料呢?這裡用到另外一個物件Bundle,我們將要傳遞的資訊封裝到該物件裡,並通過Intent物件傳遞到另一個Activity中。
public class FirstActivity extends Activity {
private Button btnButton;
private EditText etUsername;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.first);
//通過findViewById方法獲得Button例項
btnButton = (Button) findViewById(R.id.btnButton);
//通過findViewById方法獲得EditText例項
etUsername = (EditText) findViewById(R.id.etusername);
//設定Button點選監聽器
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//獲取姓名字串
String name = etUsername.getText().toString();
//例項化Bundle物件
Bundle data = new Bundle();
//將姓名資訊新增到Bundle物件中
data.putString("name", name);
//例項化Intent物件
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//為Intent新增Bundle
intent.putExtras(data);
//啟動第二個Activity
startActivity(intent);
}
});
}
}
<pre name="code" class="java">//SecondActivity.java
public class SecondActivity extends Activity {
private TextView tvResult;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.second);
//通過findViewById方法獲得TextView例項
tvResult = (TextView) findViewById(R.id.tvresult);
Map<String,String> map = new HashMap<String, String>();
map.put("James", "123456");map.put("Jordan", "abcdef");
map.put("Paul", "ABCDEF");
boolean isFinded = false;
//獲得Intent
Intent intent = getIntent();
//從Intent中獲得Bundle物件
Bundle b = intent.getExtras();
//從Bundle中獲得name
String name = b.getString("name");
//通過Map.entrySet遍歷key和value
for(Map.Entry<String, String> entry : map.entrySet()){
if(entry.getKey().equals(name)){
isFinded = true;
tvResult.setText("\n\n\nname:"+entry.getKey()+"-----------PassWordr:"+entry.getValue());
break;
}
}
if(isFinded == false){
tvResult.setText("查詢不到此人:"+name+"的資訊");
}
}
}
執行結果如下:
5、啟動另一個Activity並返回結果
有時候我們需要從第一個Activity啟動第二個Activity,在第二個Activity中處理完一些業務後,需要將處理結果返回到第一個Activity中,那麼,我們就需要在第一個Activity中使用startActivityForResult()方法啟動第二個Activity。
下面通過一個例項實現從第一個Activity中要求使用者輸入使用者名稱稱,將使用者名稱稱傳遞給第二個Activity。第二個Activity通過使用者名稱稱查詢使用者的密碼,然後在第二個Activity中將密碼返回給第一個Activity,並顯示。
//FirstActivity.java
public class FirstActivity extends Activity {
public static final int FIRSTREQUESTCODE = 0;
private Button btnButton;
private EditText etUsername;
private TextView tvResult;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.first);
//通過findViewById方法獲得Button例項
btnButton = (Button) findViewById(R.id.btnButton);
//通過findViewById方法獲得EditText例項
etUsername = (EditText) findViewById(R.id.etusername);
//通過findViewById方法獲得TextView例項
tvResult = (TextView) findViewById(R.id.tvresult);
//設定Button點選監聽器
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//獲取姓名字串
String name = etUsername.getText().toString();
//例項化Bundle物件
Bundle data = new Bundle();
//將姓名資訊新增到Bundle物件中
data.putString("name", name);
//例項化Intent物件
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//為Intent新增Bundle
intent.putExtras(data);
//啟動第二個Activity
startActivityForResult(intent, FIRSTREQUESTCODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(FirstActivity.FIRSTREQUESTCODE == resultCode){
//從Intent中獲得Bundle
Bundle b = data.getExtras();
//獲得使用者名稱和密碼
String username = b.getString("name");
String password = b.getString("password");
tvResult.setText("\n\n\n返回結果:name:"+username+"-----------PassWord:"+password);
}
}
}
//SecondActivity .java
public class SecondActivity extends Activity {
private TextView tvResult;
private Button btnBack;
private String userName;
private String PassWord;
//建立時呼叫
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定當前Activity介面佈局
setContentView(R.layout.second);
//通過findViewById方法獲得TextView例項
tvResult = (TextView) findViewById(R.id.tvresult);
Map<String,String> map = new HashMap<String, String>();
map.put("James", "123456");
map.put("Jordan", "abcdef");
map.put("Paul", "ABCDEF");
boolean isFinded = false;
//獲得Intent
Intent intent = getIntent();
//從Intent中獲得Bundle物件
Bundle b = intent.getExtras();
//從Bundle中獲得name
String name = b.getString("name");
//通過Map.entrySet遍歷key和value
for(Map.Entry<String, String> entry : map.entrySet()){
if(entry.getKey().equals(name)){
isFinded = true;
tvResult.setText("\n\n\n查詢結果:name:"+entry.getKey()+"-----------PassWord:"+entry.getValue());
userName = entry.getKey();
PassWord = entry.getValue();
break;
}
}
if(isFinded == false){
tvResult.setText("查詢不到此人:"+name+"的資訊");
}
//通過findViewById方法獲得Button例項
btnBack = (Button) findViewById(R.id.btnButton);
//設定Button點選監聽器
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//獲得Intent
Intent intent = getIntent();
//例項化Bundle物件
Bundle data = new Bundle();
//從Bundle中獲得name
data.putString("name", userName);
data.putString("password", PassWord);
//為Intent新增Bundle
intent.putExtras(data);
//設定返回結果
SecondActivity.this.setResult(FirstActivity.FIRSTREQUESTCODE, intent);
//結束當前Activity
SecondActivity.this.finish();
}
});
}
}
first.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"
android:orientation="vertical" >
<TextView
android:id="@+id/tvtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="這是FirstActivity"
/>
<TextView
android:id="@+id/tvusername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="請輸入使用者名稱:"
/>
<EditText
android:id="@+id/etusername"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/btnButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查詢"/>
<TextView
android:id="@+id/tvresult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
second.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"
android:orientation="vertical" >
<TextView
android:id="@+id/tvtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="這是SecondActivity"
/>
<Button
android:id="@+id/btnButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回結果"/>
<TextView
android:id="@+id/tvresult"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
執行結果如下:相關推薦
Android元件之Activity講解
在Android系統中activity提供視覺化的使用者介面,一個Android應用通常由多個activity組成。多個activity組成了Activity棧,當前活動的Activity處於棧頂。Activity有自己的生命週期,由Android系統來控制。
Android 元件之Fragment與Activity通訊小述
一、概述 本節主要介紹一下Fragment與Activity的互動方式,當然方法肯定並不是唯一的,我在這裡只是將自己平時的思路記錄一下,算是拋磚引玉 二、Fragment接收Activity傳遞的資料 我們想從Fragment內獲取它的託管Activity中的資料,這種情況我
Android--四大元件之Activity(一)
####1. Activity是什麼? ####2. 生命週期 ######1). Activity跳轉 ######2). 從後臺啟動 ######3). 橫豎屏切換 ####3. 啟動模式 ######1). 任務棧 ######2). laucherMode ######3).
Android基礎——四大元件之Activity
1.Activity >概念:活動面板 應用程式元件 可以繪製Ui介面 可以和使用者進行互動 預設展示全屏 其他情況 介面比其他視窗小 懸浮在其他視窗上方 >建立一個Activity >1,建立
Android 基礎知識——四大元件之Activity(二)
今天我們來探討一下activity有什麼啟動模式,都有什麼特點呢,且看下面分析 1.Task以及back stack >Task(任務) 為了完成一個功能 多個Activity的集合, 當你的應用程式啟動時 系統會自動建立Task用於管理Activ
Android四大元件之Activity-生命週期
一. Android 四大元件包括 Activity 活動 Service 服務 Broadcast Receiver 廣播接收者 Content Provider 內容提供者 1.什麼是Activity? 使用者可與其提供的螢幕進行互動,以執行撥打電話、拍
Android四大元件之Activity-啟動模式
1.Activity的啟動模式 當我們多次呼叫同一個Activity時,系統會重複建立多個例項並把它們一一放入任務棧中,這種方式顯然不符合我們的設計要求。所以Android在設計時就提供了四種啟動模式來解決此問題。 四種啟動模式分別如下: standard-標
Android 四大元件之Activity的IntentFilter匹配規則小述
一、概述 本節主要介紹Activity的IntentFilter匹配規則,其是我們在隱式啟動一個Activity的過程中所用到的知識點,在這裡我就大概的介紹下,隱式啟動一個Activity需要我們的Intent能夠匹配待啟動Activity的IntentFilt
Android 四大元件之Activity
Activity 是安卓四大元件之一,也是最常用最重要的元件。 四大元件:Activity、Service、Content provider、Broadcast Receiver。 通常一個Activity表示的就是一屏(也就是App的某個介面)。Activit
Android四大元件之Activity
Android有四大基本元件,他們分別是: Activity Service(服務) BroadcastReceive(廣播) Content Provider(內容提供者) 這四大元件在Android開發中必不可缺,今天我們來介紹一下Activity Activi
Android 四大元件之 Activity生命週期
一、 Activity 的生命週期概念 Activity 的生命週期指的是, Activity 物件從被建立到銷燬的全過程 二、 Activity 的狀態 執行狀態( Running): 該狀態表示 Activity 可見並且擁有使用者焦點; 暫停狀
Android 四大元件之 Activity-帶值跳轉
從一個Activity跳轉到另外一個Activity,並且可以帶值跳轉,但我們日常生活中使用App時會經常遇到這種狀況,假設有某個介面A,點選上面不同的按鈕會啟動不同的介面B、C、D。。。,這些介面會處理某個業務並將處理結果返回給介面A,可以採用帶返回值得跳轉來
Android四大元件之Activity詳解
一、Activity的生命週期: import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { /*建立Activity時被
Android 四大元件之---Activity 詳解
Android Activity生命週期詳解 1. 什麼是Activity? Activity作為Android四大元件之一,它有著舉足輕重的地位,每一個Activity都會獲得一個用於繪製其使用者介面的視窗,Activity是一個v
Android面試(2):四大元件之Activity---生命週期
全文來自剛哥的《Android藝術探究》 我們這裡分成兩種情況詳細介紹: 一、正常情況下的生命週期: 所謂正常情況下的生命週期,是指在有使用者參與的情況下,Activity所經過的生命週期的改變。 二、異常情況下的生
Android四大元件之Activity,Activity生命週期
Android四大基本元件分別是Activity,Service服務,Content Provider內容提供者,BroadcastReceiver廣播接收器。 Activity作為四大元件之一,其生命週期也就是它所在的程序的生命週期。Activity生
Android開發筆記: android四大元件之Activity
一,什麼是Activity? 活動Activity:一個單獨的螢幕 一個顯示的視窗 一個介面定義:用來顯示android應用的介面的一個元件!!!什麼是android元件:android應用:主要由4大元件構成元件:建立 銷燬 :一個元件從建立到銷燬的過程:生命週期不同的元
Android入門——四大元件之Activity啟動模式
standrad singleTop singleTask singleInstance 在AndroidManifest.xml中通過中設定 <activity android:name=".MainActivity" android:l
Android四大元件之 Activity(上)
(一)概述 本節開始講解Android的四大元件之一的Activity(活動); 官方文件: Activity是一個應用程式的元件,他在螢幕上提供了一個區域,允許使用者在上面做一些互動性的操作, 比如打電話,照相,傳送郵件,或者顯示一個地圖!Activit
Android 四大元件之 Activity(2)--傳值
Activity 之間的資料傳輸 1. Intent 直接傳值 第一個頁面傳值的方法 Intent intent = new Intent(); intent.putExtra("one", num1); intent.putEx