####** 一、什么是Activity?**
簡單的說:Activity就是布滿整個窗口或者懸浮于其他窗口上的交互界面。在一個應用程序中通常由多個Activity構成,都會在Manifest.xml中指定一個主的Activity,如下設置
<actionandroid:name="android.intent.action.MAIN" />
當程序第一次運行時用戶就會看這個Activity,這個Activity可以通過啟動其他的Activity進行相關操作。當啟動其他的Activity時這個當前的這個Activity將會停止,新的Activity將會壓入棧中,同時獲取用戶焦點,這時就可在這個Activity上操作了。都知道棧是先進后出的原則,那么當用戶按Back鍵時,當前的這個Activity銷毀,前一個Activity重新恢復。

~~~
<span style="font-size:18px;">
package com.android.ttx.actiitylifedemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
public class ActivityLifeDemo extends Activity {
private final static String TAG="ActivityLifeDemo";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "onCreate");
}
@Override
protected void onStart() {
Log.i(TAG, "onStart");
super.onStart();
}
@Override
protected void onRestart() {
Log.i(TAG, "onRestart");
super.onRestart();
}
@Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
}
@Override
protected void onPause() {
Log.i(TAG, "onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.i(TAG, "onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy");
super.onDestroy();
}
}
</span>
~~~
打印log,觀察activity的生命周期:
代碼很簡單,只涉及到一個Activity,一些用戶的操作,我們通過記錄操作和打印日志的方式來看看Activity的生命周期過程。
1、 運行
看到如下打印日志:
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onCreate
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onStart
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onResume
2、按下返回按鍵:
08-31 09:29:57.396: INFO/ActivityLifeDemo(354): onPause
08-31 09:29:58.216: INFO/ActivityLifeDemo(354): onStop
08-31 09:29:58.216: INFO/ActivityLifeDemo(354): onDestroy
3、長按Home鍵,彈出最近打開過的應用程序,點擊ActivityLifeDemo
08-31 08:51:46.916: INFO/ActivityLifeDemo(312): onCreate
08-31 08:51:46.916: INFO/ActivityLifeDemo(312): onStart
08-31 08:51:46.936: INFO/ActivityLifeDemo(312): onResume
4、按Home鍵
08-31 08:53:32.676: INFO/ActivityLifeDemo(312): onPause
08-31 08:53:33.796: INFO/ActivityLifeDemo(312): onStop
5、在AllList中點擊打開
08-31 08:54:14.286: INFO/ActivityLifeDemo(312): onRestart
08-31 08:54:14.286: INFO/ActivityLifeDemo(312): onStart
08-31 08:54:14.296: INFO/ActivityLifeDemo(312): onResume
#### **二、activity如何與fragment結合使用?**
通常,Fragment作為Activity整體視圖層次樹的一部分,被嵌入到宿主Activity的界面的一部分。有兩種方法能夠把Fragment添加到Activity布局中:
1. 在Activity布局文件的內部聲明Fragment。
你能夠像一個視圖那樣給Fragment指定布局屬性。下例說明了給Activity指定兩個Fragment的布局文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
在<fragment>元素中的android:name屬性指定了在布局中要實例化的Fragment。
當系統創建這個Activity布局時,它實例化在布局中指定的每一個Fragment,并且分別調用onCreateView(),來獲取每個Fragment的布局。然后系統會在Activity布局中插入通過<fragment>元素中聲明直接返回的視圖。
注:每個Fragment需要一個唯一的標識,這樣能夠在Activity被重啟時系統使用這個ID來恢復Fragment(并且你能夠使用這個ID獲取執行事務的Fragment,如刪除)。有三種給Fragment提供ID的方法:
A. 使用android:id屬性來設置唯一ID;
B. 使用android:tag屬性來設置唯一的字符串;
C. 如果沒有設置前面兩個屬性,系統會使用容器視圖的ID。
2. 編程給一個既存的ViewGroup添加Fragment。
在Activity運行的任何時候,都可以把Fragment添加到Activity布局中。你只需要指定一個放置Fragment的ViewGroup。要在Activity中使用Fragment事務(如添加、刪除、或替換Fragment),必須使用來自FragmentTransaction的APIs。你能夠向下面例子那樣從Activity中獲取一個FragmentTransaction實例:
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
然后,你能夠使用add()方法把Fragment添加到指定的視圖中,如:
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
傳遞給add()方法的第一個參數是Fragment應該被放入的ViewGroup,通過資源ID來指定這個ViewGroup,第二個參數是要添加的Fragment。
一旦FragmentTransaction對象發生了改變,就必須調用commit方法來提交改變的影響。