Android4開發入門經典 之 第三部分:Activity【私塾線上原創】
Activity基本概念
Activity是什麼
Activity是Android的一種應用元件,用來提供與使用者互動的螢幕,Activity提供一個Window來繪製使用者介面,通常一個Activity就是我們見到的一個應用程式的介面。
Activity能幹什麼
要注意一點,Activity只是提供View元件繪製的環境,它本身並不會繪製介面,因此,Activity主要用來:
1:提供View元件的環境,由多個View組和構成一個應用程式的介面
2:用來處理View元件的事件響應,可以在裡面寫介面的邏輯處理程式碼
檢視View
檢視View
檢視(Views)是可以將其自身繪製到螢幕上的物件。Android的使用者介面是由一系列的檢視樹構成,介面都是由一組以樹的形式出現的檢視組成的。
開發者可以通過建立一個新的檢視的方法來使用自定義的圖形處理技術,比如開發遊戲,或者是使用 使用者圖形視窗介面widget。
檢視組Viewsgroups
檢視組是一種特殊型別的檢視物件,它的功能是包含和管理下級試圖和其它檢視組的集合。檢視組讓你可以為你的使用者介面新增結構,從而建立複雜並可以作為單獨實體進行訪問的螢幕元素。
Activity和View
Android應用程式最基本的功能單位是Activity,主要用來實現介面的功能處理,但是它本身並不能使自己顯示在螢幕上。
你可以使用檢視views和檢視組viewgroups,它們是Android平臺上的最基本的使用者介面元素。
建立和使用Activity
建立Activity
建立Activity非常簡單,只需要:
1:繼承Activity
2:實現Activity的回撥方法
比如:onCreate()方法,一定要記得在裡面回撥父類的onCreate方法和setContentView方法,由父類去佈局介面。
3:建立Activity裡面具體的View元件,並設定他們的屬性和佈局方式
到這個地方,畫介面的工作就完成了
4:然後是具體的寫介面的工作
使用Activity
要使用Activity也非常簡單,Activity的展示無非兩種情況,一是作為程式啟動後的第一個介面,另外一個就是從其他地方導航過來。
無論哪種情況都需要在AndroidManifest.xml裡面註冊,對於第一種情況,註冊的時候就要配置,對於第二種情況多半需要使用intent。
啟動Activity
配置式
要作為程式入口的Activity,在AndroidManifest.xml裡面配置即可,示例:
java程式碼:
在一個Activity裡面啟動另外的Activity,示例:
java程式碼:
Intent in = new Intent(); in.setClass(HelloWorldActivity.this, T2.class); HelloWorldActivity.this.startActivity(in);
如果還想要傳遞引數,就直接在intent裡面新增extra即可。
銷燬Activity
如果想要銷燬Activity,可以使用
1:finish方法,銷燬Activity本身
2:finishActivity方法,可以指定銷燬某一個requestId對應的Activity。主要用來銷燬通過startActivityForResult(Intent, int)啟動的Activity,因而有requestId
注意
通常情況下,你是不需要自己去顯示的銷燬Activity的,Activity的生命週期是由系統來控制的,可以讓系統來確定什麼時候不需要這個Activity了,然後由系統去銷燬。
這樣就能在系統進行Activity導航的時候,不會出錯。
接收啟動的Activity的Result
如果想要接收啟動的Activity的返回結果,可以使用startActivityForResult :
1:在啟動的Activity
(1)使用startActivityForResult
java程式碼:
public void onClick(View v) { Intent in = new Intent(); in.setClass(HelloWorldActivity.this, T2.class); in.putExtra("param1", 798); HelloWorldActivity.this.startActivityForResult(in,123); }
(2)實現接收返回值並處理的方法
java程式碼:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 123) { if(resultCode == 456){ Log.i("HelloWorldActivity","result=="+data.getExtras().getString("ret")); } } }
2:在返回值的Activity
java程式碼:
public void onClick(View v) { switch (v.getId()) { case R.id.back: Intent in = new Intent(); in.putExtra("ret", "now ret=="+param1); T2.this.setResult(456, in); T2.this.finish(); break; } }
(1)把要返回的值包裝在intent裡面
(2)使用setResult方法
(3)結束自己這個Activity
Activity的狀態
Activity的狀態
Activity有三種狀態,分別是:
1:resumed :
Activity被顯示到前端介面,此時的Activity是 running的
2:paused
另外一個Acvitity被顯示到前端介面,但此時這個Activity仍有部分處於可視狀態,但此時這個Activity已經不能被使用者操作了。
通常情況下,處於這個狀態的Activity還是活著的,系統一般不會銷燬它。但是,如果系統資源實在緊張,這個狀態的Activity是可以被kill掉的。
3:Stopped
這種狀態的Activity通常都是完全看不見的,處於“background ”,系統一般不會銷燬它。但是,如果系統資源實在緊張,這個狀態的Activity是可以被kill掉的,而且是會優先被銷燬掉。
Activity的生命週期圖
Activity的回撥方法
onCreate() :在Activity第一次被建立的時候呼叫,通常在這裡做一些靜態初始化的工作,比如:建立views、繫結資料到列表等。這個方法會把這個Activity上一次執行所儲存的狀態傳遞進來。
onStart() : 在Activity變得可以被使用者看見之前呼叫。
onRestart() :在Activity被stop後,重新變得可見的時候呼叫。
onResume(): 在Activity可見,能跟使用者進行互動的時候呼叫。這時候,這個Activity來到Activity棧的頂端,使用者就可以操作這個Activity了。
onPause()
在系統準備resume其他的Activity的時候呼叫。這個方法裡面通常可以實現:提交未儲存的資料,終止動畫等。
onStop(): 當Activity不可見的時候呼叫這個方法。
onDestroy()
呼叫finish方法,或是系統判斷,需要銷燬這個Activity的時候呼叫。
Activity在螢幕旋轉時的生命週期
如果不做任何配置,那麼會將當前Activity例項銷燬,然後再重新建立一個。
如果要避免銷燬重建的過程,可以在清單檔案裡面,對Activity配置android:configChanges=“ orientation|screenSize”,這樣會只回撥onConfigurationChanged方法。
如果Activity不希望跟著螢幕旋轉而發生變化,可以在清單檔案裡面配置android:screenOrientation,值為“portrait”是豎屏,landscape為橫屏。但是如果設定了這個屬性,那麼android:configChanges配置會失效。
儲存Activity的狀態
概述
當Activity處於paused或stopped的時候,只要相應的程式還沒有被銷燬,那麼Activity的狀態會被自動的保留在記憶體裡面。因此,你返回到這個Activity的時候,仍然能夠看到上一次的資料。
然而,當Activity對應的程式被銷燬過後,你再次返回或是重新進入這個Activity,上一次的資料已經丟失了,如果這種情況下,你也希望能保留上一次的狀態,也就是資料,該怎麼辦呢?
onSaveInstanceState()方法
你可以覆蓋實現onSaveInstanceState()方法來儲存你想要儲存的資料。對應的,系統會回撥onRestoreInstanceState方法來恢復資料。
要注意:Android系統並不保證一定會呼叫onSaveInstanceState()方法,因此在這個方法裡面,你只應該儲存一些瞬時狀態的資料,而不應該儲存持久化的資料,你應該在onPause裡面儲存持久化的資料。
儲存Activity的狀態圖
Tasks和回退棧
什麼是Task
簡單點說,Task就是為了完成某一個工作而組合在一起的Activity集合。例如:要回復簡訊,通常先要顯示一個資訊列表,然後使用者開啟其中一個資訊,然後點選回覆,然後輸入回覆內容,然後按下回覆按鍵,最後顯示一個傳送成功的資訊。那麼在這個過程中,會有多個Activity,但是他們都是為了完成回覆簡訊這個功能。所以可以把Task簡單的當成“應用程式”來看。
那麼在Android系統中,會把這多個Activity儲存在同一個棧裡面。
什麼是回退棧:用來存放前面執行的Activity和相應狀態的棧。
按返回按鈕
按返回按鈕的時候,回退棧會遵循後進先出的原則,把最後的一個Activity彈出棧,也就是會銷燬掉最後一個Activity。
按Home按鈕
使用者按Home按鈕離開整個Task,此時整個Task會在background繼續執行,系統會保留Task裡面的每一個Activity的狀態,當使用者重新再回到這個task的時候,task將回到前臺執行,並恢復上次執行的狀態。
如果某個Activity呼叫了finish方法,那麼它將會從棧中消失,後面的Activity會依次移動,補充它的位置
Activity的Fragments
Loaders
概述:從Android3.0開始加入了Loaders,它能讓Activity或Fragment很容易的實現資料的非同步裝載。
特點
1:能在任意的Activity或Fragment裡面使用
2:非同步裝載資料
3:自動監控源資料的變化
4:當配置改變或重啟的時候,能自動續連而無需重新查詢資料。
常用的API
1:LoaderManager:用來建立和維護Loader,通常一個Activity或Fragment一個
2:LoaderManager.LoaderCallbacks:LoaderManager的一些回撥方法
3:Loader:實現非同步裝載資料的抽象類,典型的實現是CursorLoader
4:AsyncTaskLoader:通過AsyncTask來實現的一個抽象Loader
5:CursorLoader: AsyncTaskLoader的一個具體實現類,它不會阻塞UI 執行緒,使用這個Loader的最佳場景是從ContentProvider中裝載資料。
視訊配套PPT,視訊地址【Android4開發入門經典獨家視訊課程】
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26715458/viewspace-717425/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android4開發入門經典 之 第五部分:Service【私塾線上原創】Android
- Android4開發入門經典 之 第八部分:SQLite【私塾線上原創】AndroidSQLite
- Android4開發入門經典 之 第十二部分:最佳實踐【私塾線上原創】Android
- Android4開發入門經典 之 第六部分:Broadcast【私塾線上原創】AndroidAST
- Android4開發入門經典 之 第十部分:多媒體【私塾線上原創】Android
- Android4開發入門經典 之 第四部分:使用者介面【私塾線上原創】Android
- Android4開發入門經典 之 第九部分:Content Provider【私塾線上原創】AndroidIDE
- Android4開發入門經典 之 第十一部分:網路程式設計【私塾線上原創】Android程式設計
- Android4開發入門經典 之 第七部分(1):資料儲存【私塾線上原創】Android
- Android4開發入門經典 之 第七部分(2):資料儲存【私塾線上原創】Android
- Android4開發入門經典 之 第二部分:Android應用的核心基礎【私塾線上原創】Android
- Android4開發入門經典 之 第四部分:使用者介面Android
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- 嵌入式開發 ARM入門經典
- 【Android開發入門教程】三.Activity入門指南!Android
- Webpack經典入門Web
- [轉]BI入門經典
- Kafka入門經典教程Kafka
- BI入門經典 (轉)
- 聊聊經典機器學習入門機器學習
- 安卓入門---安卓開發實戰經典1-3章安卓
- Unix 入門經典 筆記筆記
- springboot入門經典Spring Boot
- Python 入門之經典函式例項(二)Python函式
- 《HTML5移動應用開發入門經典》——2.9 測驗HTML
- Python入門經典案例一Python
- 《jQueryMobile入門經典》——2.4 總結jQuery
- 最經典的黑客入門教程黑客
- 《Windows Phone 7入門經典之使用Silverlight和XNA開發Windows Phone應用》書評Windows
- 經典加密演算法入門-RSA加密演算法
- 博弈論經典模型解析(入門級)模型
- 《jQueryMobile入門經典》——2.5 問與答jQuery
- [譯]ES入門(第三部分)
- 部分JS經典題目解析JS
- 遊戲開發新手入門之DirectX入門(轉)遊戲開發
- C語言入門經典(第5版)C語言
- Go語言入門經典第18章Go
- 新手入門經典:Jsp環境配置JS