1 - 新建一個類,繼承Activity前端
package com.example.activiylife; import android.app.Activity; public class SecondActivity extends Activity{ }
2- 重寫Activity中的onCreate方法android
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
3- 建立佈局文件:數據結構
<?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/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textView"/> </LinearLayout>
4- 在onCreate方法中調用佈局文件app
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); }
5- 在主配置文件(AndroidManifest.xml)中註冊該Activity函數
在<application>中添加一對<activity>子標籤;佈局
android:name後面寫新增的activit的完整類名this
<activity android:name="com.example.activiylife.SecondActivity" android:label="@string/app_name" > </activity>
至此,就完成、增長了一個全新的activity。code
若是想要看見它的話,咱們還須要改一個地方:xml
在主配置文件中,爲這個新activity增長這段內容:對象
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
有這段內容,這個activity就會被做爲默認activity,另外,咱們還應該在前一個使用它的地方,把它刪除了:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activiylife.MainActivity" android:label="@string/app_name" > </activity> <activity android:name="com.example.activiylife.SecondActivity" 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>
這時,啓動程序就會默認啓動新增的activity:
1- 生成一個意圖對象(Intent)
Intent intent = new Intent();
2- 調用setClass方法設置要啓動的Activity
//參數爲Context類型對象,它是Activity的父類,全部Activity對象能夠向上轉型爲Context對象 //第一個參數是當前activity對象,第二個參數爲要啓動的activity.class intent.setClass(Context packageContext, Class<?> cls)
3- 調用startActivity方法啓動Activity
startActivity(intent);
這樣就能實現啓動另外一個activity;
下面用一個例子來講明: 在第一個activity點擊按鈕啓動第二個activity。
第一個activity的按鈕監聽:
class ButtonListener implements OnClickListener { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } }
同時將默認activity設置爲第一個activity:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activiylife.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.activiylife.SecondActivity" android:label="SecondActivity" > </activity> </application>
啓動程序:
點擊按鈕來到secondeactivity:
棧:一種先進後出的數據結構
用在activity上面的意思就是:
第一個activity在棧的最底層; 第二個activity在棧的倒數第二層; ... 最新的activity在棧的最上面,顯示在手機屏幕上;
點擊返回的時候,是返回到前一個activity,五、四、三、二、1這樣一直返回到棧最底層的activity。
Activity從建立到銷燬這就是一個生命週期,在這個過程當中的不一樣階段要作不一樣的事。 具體處於什麼階段,這個由系統來控制,但具體階段所作的事,能夠根據需求來實現。
這些函數由系統自動調用; 何時調用是由系統決定的,但函數內容是咱們能夠根據需求來定製。
爲了初步瞭解這些函數的調用時機,咱們經過一個例子來講明。
在這個例子中,咱們一共須要兩個activity,實現從界面1點擊按鈕能進入界面2。
同時在兩個activity中,都重寫這個7個函數,打印輸出語句。
第一個activity的按鈕監聽器:
class ButtonOnClickListener implements OnClickListener { public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } }
除onCreate外,另外的6個方法,兩邊activity都要重寫: (記得在onCreate方法中 寫一行打印語句)
protected void onDestroy() { super.onDestroy(); System.out.println("----onDestroy----"); } protected void onPause() { super.onPause(); System.out.println("----onPause----"); } protected void onRestart() { super.onRestart(); System.out.println("----onRestart----"); } protected void onResume() { super.onResume(); System.out.println("----onResume----"); } protected void onStart() { super.onStart(); System.out.println("----onStart----"); } protected void onStop() { super.onStop(); System.out.println("----onStop----"); }
啓動APP,進入第一個activity:
執行的函數依次爲:
1- onCreate-- Activity對象第一次建立時執行(第一個activity第一次建立)
2- onStart-- 能夠看見Activity的時候執行(第一個activity可見)
3- onResume-- 當Activity能夠與用戶交互時調用(第一個activity可交互)
接着咱們打開第二個activity:
函數執行順序:
1- onPause-- 即將啓動另一個activity時執行。(這裏要啓動第二個activity了,因此第一個activity執行了onPause方法)
2- onCreate-- activity對象第一次被建立時執行(第二個activity是第一次啓動,因此要執行onCreate)
3- onStart-- 當actvitiy可見時被執行 (第二個activity可見)
4- onResume-- 當activity能夠進行交互時執行 (第二個activity可交互)
5- onStop-- 當activity不可見時執行 (第一個activity不可見)
接着咱們點擊返回:
執行順序:
1- onPause-- 即將啓動另一個activity時執行(要啓動第一個activity,因此第二個activity執行onPause)
2- onRestart-- 當一個Activity再次啓動以前執行(第一個activity在以前已經被啓動過了,因此這裏執行onRestart)
3- onStart-- activity可見時執行(第一個activity可見)
4- onResume-- activity可交互時執行(第一個activity可交互)
5- onStop-- activity不可見時執行(第二個activity不可見)
6- onDestroy-- 當前activity被銷燬以前執行(第二個activity被銷燬)
以上,咱們就能夠了解到一個activity的生命週期是什麼樣的。
Activity-A第一次啓動時執行:onCreate\onStart\onResume
啓動其餘Activity前,Activity-A會執行onPause
在其餘Activity啓動好,同時看不見Activity-A的時候,Activity-A會執行onStop
從新回到Activity-A的時候,Activity-A會執行:onRestart\onStart\onResume
當關閉Activity-A的時候,Activity-A會執行:onStop/onDestroy.
狀態
Resumed : Activity對象處於運行狀態
Paused : 另外一個Activity位於前端,但本Activity還可見
Stopped : 另外一個Activity位於前端,徹底遮蔽本Activity
注意:
Activity生命週期圖
onCreate和onDestroy一對
onPause和onResume一對
onStop和onStart一對
onRestart暫時一我的。
onCreate-買車 onDestroy-報廢
onStart-點火啓動 onStop-熄火
onResume-踩油門前進 onPause-鬆開油門(剎車)