Android基礎之Activity初步認識(生命周期)

介紹

當我們新建了一個Android工程榛了,最先看到的是一個叫MainActivity的類。什么也不改在手機上運行出來是一個顯示有Hello World這幾個字母的界面抢肛。也就是我們一開始看到的就是Activity這個東西狼钮,所以我們就先從Activity這里開始說。Activity是Android里面承載頁面的類捡絮,頁面布局是在對應的XML文件里面寫熬芜。當然,要看我們怎么用福稳,我們可以用一個Activity實現(xiàn)一個dialog窗口形式的東西涎拉,也可以用它實現(xiàn)我們常見的遮罩層,看個人在做項目的時候的需求的圆。咱們這里今天只講講Activity的基礎的東西鼓拧,建議剛學習Android的人使用Eclipse ADT,比較容易入手越妈,下面都是基于ADT開發(fā)工具來講解的季俩。

怎么打開一個新的Activity

在我們看到hello world頁面的時候,我們會想這個頁面是工具自動生成的梅掠,就只有這么幾行字酌住。那我想自己寫一個頁面,要怎么寫呢阎抒,寫完要怎么打開這個頁面呢酪我。我先介紹一下:

選中MainActivity所在的包,右鍵點擊會彈出個菜單挠蛉,依次New->Class祭示,會彈出一個界面讓你定義Activity的名字,SuperClass是要繼承的基類谴古,我們選擇android.app.Activity质涛。還有其他的如下圖:

5233117-f3324666d65cb0a9 (1).png

建完之后會發(fā)現(xiàn)類里面啥沒有,可以先把MainActivity里面的這段代碼拷貝過來j就可以了:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

下面我們在把XML布局文件定義一下掰担,選中res下的layout文件夾汇陆,右擊依次New->Android Xml File,填好xml布局文件的名字后带饱,選擇LinearLayout毡代,點Finish阅羹,如下圖:

5233117-4aa95b76f9f28207.png

我們讓他在頁面上顯示一行字“我的Activity”,可以在activity.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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="我的Activity"/>
    
</LinearLayout>

布局文件和Activity都寫完了教寂,我們還要把布局文件和Activity關聯(lián)起來捏鱼。再把Activity1里面的這句代碼改一下:

setContentView(R.layout.activity_main);

修改之后:

setContentView(R.layout.activity1);

很好理解,就是把布局文件引入進來酪耕,到這一步就我們新寫的Activity就完成了导梆。然后把Activity1加入到配置文件AndroidManifest.xml里:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>
        
        <activity android:name="com.example.jsdemo1.Activity1"/>
        
    </application>

在MainActivity里面加個按鈕,用來點擊打開Activity1.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/helloword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <Button 
        android:id="@+id/openact1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/helloword"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:text="打開Activity1"/>

</RelativeLayout>

mainactivity里面改一下:

public class MainActivity extends Activity {
    
    private Button openact1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        openact1 = (Button) findViewById(R.id.openact1);
        openact1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Intent it = new Intent(MainActivity.this,Activity1.class);
                MainActivity.this.startActivity(it);
            }
        });
    }

}

注意onClick方法里面的兩行代碼就是打開Activity1的作用迂烁。

Activity的生命周期

到現(xiàn)在我們已經(jīng)能夠簡單添加自己的頁面了看尼,然后做頁面跳轉了。但我們發(fā)現(xiàn)盟步,手機上只顯示了我們寫的眾多頁面中的一個藏斩,那么有個疑問,當手機顯示其中一個頁面的時候却盘,其他頁面是出于一個什么狀態(tài)呢狰域?從一個頁面跳轉到一個新的頁面后,老的頁面有沒有被銷毀谷炸?當我們點擊手機的返回鍵返回到老頁面后北专,新的頁面有沒有銷毀?頁面跳轉的時候旬陡,老頁面和新頁面都執(zhí)行了哪些操作呢拓颓?這就是Activity的生命周期,規(guī)范了一個Activity的生老病死描孟,從創(chuàng)建到銷毀驶睦。先上圖:

clipboard.png

onCreate():創(chuàng)建一個Activity,這個是Activity必須override的一個方法匿醒,方法里面會執(zhí)行初始化Activity的主題场航、數(shù)據(jù)恢復,對頁面元素的初始化等廉羔。
onStart():這階段Activity已有可視化界面溉痢,但是頁面還沒有加載完全,再詳細調(diào)用了什么操作先不用管憋他。如果從新頁面返回或者從后臺返回孩饼,會重新執(zhí)行這個方法。
onResume():這個方法執(zhí)行完后竹挡,界面就加載完全了镀娶,頁面上的按鈕,輸入框這些元素都可以進行操作了揪罕,整個頁面也獲取到了焦點梯码。如果從新頁面返回或者從后臺返回宝泵,會重新執(zhí)行這個方法。
onPause():點擊頁面上一個按鈕或者其他方式觸發(fā)的頁面跳轉轩娶,及按下home鍵和返回鍵儿奶,再跳轉前首先執(zhí)行這個方法。注意如果在Activity上彈了一個提示框鳄抒,再把提示框取消掉廓握,執(zhí)行流程是onPause->onResume
onStop():在執(zhí)行onPause后,如果Activity已不可見嘁酿,會執(zhí)行此方法。
onRestart():在執(zhí)行onStop后男应,如果Activity沒有被銷毀闹司,而且要回到這個Activity時,將會觸發(fā)此方法沐飘,此后依次執(zhí)行onRestart->onStart->onResume
onDestroy():在執(zhí)行onStop后游桩,如果Activity被銷毀,比如按了返回鍵耐朴,就會執(zhí)行此方法來銷毀Activity釋放內(nèi)存資源借卧。凡是執(zhí)行了onDestroy方法的Activity,想重新顯示筛峭,必須onCreate->onStart->onResume
注意圖上的左邊铐刘,意思是,如果手機內(nèi)存不夠或者有更高優(yōu)先權的應用需要內(nèi)存影晓,系統(tǒng)將會銷毀回收Activity镰吵。比如在打開Activity后按了home鍵,應用就一直在后臺運行挂签,Activity此時并沒有執(zhí)行onDestroy方法銷毀疤祭,但是如果系統(tǒng)需要內(nèi)存,系統(tǒng)會殺死該Activity釋放內(nèi)存資源饵婆。銷毀后應用從后臺返回勺馆,會重啟應用。

下面舉一個Activity生命周期的行為例子:
Activity創(chuàng)建:onCreate--->onStart---->onResume()
如果按下Home鍵侨核,onPause--->onStop
再次進入此程序草穆,onRestart----->onStart--->onResume
此時,返回鍵:onPause--->onStop---->onDestory

最后芹关,文中如有任何錯誤的地方续挟,歡迎評論糾錯(__) 。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侥衬,一起剝皮案震驚了整個濱河市诗祸,隨后出現(xiàn)的幾起案子跑芳,更是在濱河造成了極大的恐慌,老刑警劉巖直颅,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博个,死亡現(xiàn)場離奇詭異,居然都是意外死亡功偿,警方通過查閱死者的電腦和手機盆佣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來械荷,“玉大人共耍,你說我怎么就攤上這事《窒梗” “怎么了痹兜?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颤诀。 經(jīng)常有香客問我字旭,道長,這世上最難降的妖魔是什么崖叫? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任遗淳,我火速辦了婚禮,結果婚禮上心傀,老公的妹妹穿的比我還像新娘屈暗。我一直安慰自己,他們只是感情好脂男,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布恐锦。 她就那樣靜靜地躺著,像睡著了一般疆液。 火紅的嫁衣襯著肌膚如雪一铅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天堕油,我揣著相機與錄音潘飘,去河邊找鬼。 笑死掉缺,一個胖子當著我的面吹牛卜录,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眶明,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼艰毒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搜囱?” 一聲冷哼從身側響起丑瞧,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柑土,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绊汹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稽屏,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年西乖,在試婚紗的時候發(fā)現(xiàn)自己被綠了狐榔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡获雕,死狀恐怖薄腻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情届案,我是刑警寧澤被廓,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萝玷,受9級特大地震影響,放射性物質發(fā)生泄漏昆婿。R本人自食惡果不足惜球碉,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仓蛆。 院中可真熱鬧睁冬,春花似錦、人聲如沸看疙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽能庆。三九已至施禾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搁胆,已是汗流浹背弥搞。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渠旁,地道東北人攀例。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像顾腊,于是被迫代替她去往敵國和親粤铭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容