介紹
當我們新建了一個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质涛。還有其他的如下圖:
建完之后會發(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阅羹,如下圖:
我們讓他在頁面上顯示一行字“我的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)建到銷毀驶睦。先上圖:
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
最后芹关,文中如有任何錯誤的地方续挟,歡迎評論糾錯(__) 。