天天看點

四大元件之Activity

四大元件之activity

本章引言:

最近我的師弟師妹們正在學習Android 的四大元件,也有人問了我這方面的問題,這裡我就來講講四大元件,希望能給他們提供一些幫助吧!

四大元件(Android 四大金剛)都是什麼?:

第一大金剛:activity(活動)——本章要講的東西。

第二大金剛:service (服務)

第三大金剛: BroadcastReceiver (廣播/廣播接受)

第四大金剛: ContentProvider (内容提供)

Activity的介紹

  • 官方給出的英文翻譯(官方标準):

    Activity是一個應用程式的元件,他在螢幕上提供了一個區域,可以讓使用者在上面進行一些互動性的操作,比如打電話,照相,發郵件,或者是顯示一個地圖。Activity可以了解成一個繪制使用者界面的視窗,而這個視窗可以填滿整個螢幕,也可以比螢幕小或者是浮動在其他視窗的上方

  • 簡單了解(老土話):

    Activity是用來顯示使用者界面的,它有一個牛逼的作用就是可以與使用者進行互動。

  • 注意:

    1、一個App中可以有多個Activity,其實意思就是一個App可以有多個界面。而且這個界面可以大,可以小。

這麼牛逼的一個東西,就像一個生命體,當然有它自己的生命了,接下來就講講activity的生命周期(叢生到死,牛逼的是它還可以重生)

Activity的生命周期(生命輪回):這裡我借用一下别人的圖,我覺得這張圖很好的解釋了Activity的生命周期:

四大元件之Activity

注意:

onPause()和onStop() 被調用的前提是:

1、打開一個新的Activity(隻要打開一個新的activity兩個方法都會調用),那麼兩者的差別在于:onPouse();調用的時候原來的Activity還是可以見到的狀态,但是onStop()調用的時候後面一個已經是不可見的狀态了。

2、注意:AlertDialog和PopWindow是不會觸發上面兩個回調方法的。

Activity的建立:

1、定義一個Activity類名,繼承Activity類或者是它的子類

class MyActivity extends Activity{
}
           

2、重寫onCreate()方法,在該方法中調setContentView()設定要顯示的視圖

public void onCreate(Bundle saveInstanceStanceState){
super.onCreate(savedInstanceState);//實作父類的方法
setContentView(R.layout.main);//加載布局檔案
}
           

3、在AndroidManifest.xml對Activity進行配置

<activity 
         android:icon = "圖示"
         android:name = "類名"
         android: label = "Activity顯示的标題"
         Android:theme = "要應用的主題"></activity>
           

4、啟動Activity:調用startActivity(Intent);

Intent it = new Intent(MainActivity.this,MyActivity.class);
startActivity(it)
           

5、關閉Activity調用finish,直接關閉目前的Activity

我們可以把它寫到第二個activity的方法中,當啟動第二個Activity時,第一個Activity就會被關閉

finish();

Activity的啟動:

1、顯示啟動:通過包名的方式去啟動

常見的:
Intent it = new Intent(目前Activity.this,要啟動的Activity.class);
startActivity(it);

通過Intent的ComponentName:
ComponentName cn = new ComponentName("目前Activity的全限定類名","啟動Activity的全限定類名");
Intent intent = new Intent();
intent.setCompoent(cn);
startActivity(intent);
注意這裡的全限定類名就是你的activity的路徑,比如com.demo.myactivity

初始化Intent時指定的包名:
Intent intent = new Intent("android.intent.action.MAIN");
intent.setClassName("目前activity的全限定類名","啟動activity的全限定類名");
startActivity(intent);
           

2、隐式啟動:

通過Intent-filter 的Action,Category或data來實作

這個是通過Intent的 intent-filter來實作的,等到我們将Intent的時候會詳細講解。

Activity和Activity之間的傳值:

1、Bundle:

四大元件之Activity

這裡如果傳遞一個集合的時候,我們可以将,資料序列化再傳遞。(這裡就不詳細講了)

2、多個activity之間的互動,用到了自帶的一個回調方法:

四大元件之Activity

Activity和ActionBarActivity和AppCompatActivity之間的差別:

activity這裡我就不多做解釋了,上面已經說過了

ActivityBarActivity已經别廢棄,聽名字就知道,這個是帶有ActionBar的窗體,但是在5.0以後,這個就被Google所廢棄了,現在我們常用的是ToolBar而在我們實際開發中,我們會将這個去掉,自己去定義一個ActionBar加上我們的沉浸式。

在我們建立Android Studio中的activity時會預設繼承的是AppCompatActivity 當然這裡你也可以寫成是Activity,不過AppCompatActivity給我們提供了一些新的東西而已,具體你選哪一個看你個人喜好了。

onCreat()一個參數和兩個參數的差別:

  • 兩個個參數:
    四大元件之Activity
  • 一個參數
    四大元件之Activity

差別在于兩個參數的方法,為Acitvity提供了持久化的能力,什麼是持久化的能力了,簡單點講就是為我們提供了一個儲存activity 資料的能力,(比如點選home鍵,按下電源鍵,切換橫豎屏等)

這裡這個牛逼的功能必須要添加一個屬性:

同時還要搭配兩個方法:

public void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState)

public void onRestoreInstanceState(Bundle saveInstanceState,PersistableBundle persistentState)
           

面試中經常問道的問題是:你知道Activity的四種啟動模式嗎?

Activity啟動模式設定:

<activity android:name=".MainActivity" android:launchMode="standard" />  
           

Activity的四種啟動模式:

. standard

模式啟動模式,每次激活Activity時都會建立Activity,并放入任務棧中。  
           

. singleTop

如果在任務的棧頂正好存在該Activity的執行個體, 就重用該執行個體,否者就會建立新的執行個體并放入棧頂(即使棧中已經存在該Activity執行個體,隻要不在棧頂,都會建立執行個體)。  
           

. singleTask

如果在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的onNewIntent())。重用時,會讓該執行個體回到棧頂,是以在它上面的執行個體将會被移除棧。如果棧中不存在該執行個體,将會建立新的執行個體放入棧中。   
           

. singleInstance

還有一些系統提供的Activity這裡就不一一做講解了,需要使用的時候可以從網絡上擷取,這裡我就不講解了。

本章小結:

其實關于activity的一些知識點還有很多,有興趣的可以去網絡上查詢。這裡我隻是講解一些重點,和面試中經常問道的問題做講解。其他知識會在後期的項目實踐中給大家仔細講解。

——作者Gavin 高,本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用于商業用途,侵權必究!!!!

繼續閱讀