Android核心基礎-四大框架Activty

<p>Activity</p><p> <span style="white-space:pre">	</span><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity可以翻譯爲活動,我覺得他的核心意思就是想提供給用戶一個可交互的界面,從而讓APP“活”起來。<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity也是APP的最主要的入口,所以我個人認爲他也是四大組件裏最重要的一個。雖然現在的APP裏的<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity的數量可能會越來越少,不過他依然是最最重要的一部分,對於初學者來講,一個簡單普通的應用可以沒有</span></span></span>Service、</p><p>廣播,和provider  但是不可能沒有<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity!</span></p><p>
</p><p><span style="white-space:pre">	</span>啓動<span style="font-family: 'Times New Roman';">Activity</span><span style="font-family:宋體;">有兩種方法,第一種是快捷方式啓動(點擊圖標),第二種是意圖調用(</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋體;">)</span></p><p>創建<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">:</span></p><p>	1<span style="font-family:宋體;">)定義類繼承</span><span style="font-family:Times New Roman;">Activiyt,</span></p><p>	2<span style="font-family:宋體;">)在清單文件中的</span><span style="font-family:Times New Roman;"><application></span><span style="font-family:宋體;">節點中聲明</span><span style="font-family:Times New Roman;"><activity></span></p><p>顯式意圖和隱式意圖:</p><p>	顯式意圖:</p><p>		概念:顯式意圖是給創建的意圖指定類,通過字節碼或者全類名來啓動<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">。</span></p><p>		創建方法:</p><p>			1<span style="font-family:宋體;">)創建</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋體;">對象,在構造函數內傳入</span><span style="font-family:Times New Roman;">this</span><span style="font-family:宋體;">和想要調用的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">的類字節碼,</span></p><p>			2<span style="font-family:宋體;">)</span><span style="font-family:Times New Roman;">startActivity(</span><span style="font-family:宋體;">剛剛創建的</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋體;">對象</span><span style="font-family:Times New Roman;">)</span><span style="font-family:宋體;">。</span></p><p>	隱式意圖:</p><p>		隱式意圖是通過過濾清單文件中<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">所註冊的</span><span style="font-family:Times New Roman;"><intent-filter></span><span style="font-family:宋體;">來啓動,想要被隱式意圖過濾出來,需要在</span><span style="font-family:Times New Roman;"><intent-filter></span><span style="font-family:宋體;">標籤中建立三個子標籤</span></p><p>			1<span style="font-family:宋體;">):</span><span style="font-family:Times New Roman;"><action android:name="android.intent.action.VIEW"/> <--!</span><span style="font-family:宋體;">這個是不變的!</span><span style="font-family:Times New Roman;">--></span></p><p>			2<span style="font-family:宋體;">):</span><span style="font-family:Times New Roman;"><data android:scheme="</span><span style="font-family:宋體;">類型(</span><span style="font-family:Times New Roman;">http</span><span style="font-family:宋體;">或者</span><span style="font-family:Times New Roman;">MP3</span><span style="font-family:宋體;">等等)</span><span style="font-family:Times New Roman;">"/></span><span style="font-family:宋體;">。</span></p><p>			3<span style="font-family:宋體;">):</span><span style="font-family:Times New Roman;"><category android:name="android.intent.category.DEFAULT">//<--!</span><span style="font-family:宋體;">這個也是不變的。</span><span style="font-family:Times New Roman;">--></span></p><p>		創建方法:</p><p>			1<span style="font-family:宋體;">)創建</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋體;">的空參對象,</span></p><p>			2<span style="font-family:宋體;">)用</span><span style="font-family:Times New Roman;">setAction</span><span style="font-family:宋體;">來指定動作,</span></p><p>			3<span style="font-family:宋體;">)用</span><span style="font-family:Times New Roman;">setData</span><span style="font-family:宋體;">或</span><span style="font-family:Times New Roman;">setDataAndType()</span><span style="font-family:宋體;">來指定數據和數據類型,</span></p><p>			4<span style="font-family:宋體;">)</span><span style="font-family:Times New Roman;">startActivity(</span><span style="font-family:宋體;">剛剛創建的</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋體;">對象</span><span style="font-family:Times New Roman;">)</span><span style="font-family:宋體;">。</span></p><p> </p><p>Bundle<span style="font-family:宋體;">:</span></p><p>	在意圖中封裝了一個<span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋體;">對象,可以再意圖中傳遞對象, </span><span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋體;">是一個</span><span style="font-family:Times New Roman;">map</span><span style="font-family:宋體;">集合可以用</span><span style="font-family:Times New Roman;">intent.putExtra()</span><span style="font-family:宋體;">方法來向</span><span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋體;">中裝入數據。在意圖所啓動的</span><span style="font-family:Times New Roman;">Acitiviyt</span><span style="font-family:宋體;">中可以用</span><span style="font-family:Times New Roman;">intent.getIntExtra()</span><span style="font-family:宋體;">等方法來取出之前所裝入的數據</span><span style="font-family:Times New Roman;">.</span></p><p>	注意:<span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋體;">中只能存入可以被系列化的對象或者基本數據</span></p><p> </p><p>Result<span style="font-family:宋體;">等待回傳:</span></p><p>	在用意圖跳轉<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">時可以使用</span><span style="font-family:Times New Roman;">startActivityForResult()</span><span style="font-family:宋體;">方法來等待新創建的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">返回數據,重寫</span><span style="font-family:Times New Roman;">onActivityResult()</span><span style="font-family:宋體;">方法,方法中有一個參數是</span><span style="font-family:Times New Roman;">Intent data </span><span style="font-family:宋體;">就是新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">回傳的數據。新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">運行</span><span style="font-family:Times New Roman;">setResult()</span><span style="font-family:宋體;">來設置要回傳的數據,當新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">被關閉時就會調用</span><span style="font-family:Times New Roman;">onActivityResult</span><span style="font-family:宋體;">方法。 (方法內可以傳認證碼),</span></p><p> </p><p>生命週期:</p><p>	Activity<span style="font-family:宋體;">一共有三種存活狀態:</span></p><p>		1<span style="font-family:宋體;">)運行:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋體;">在最前端,正在運行。</span></p><p>		2<span style="font-family:宋體;">)停止:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋體;">不可見,在後臺運行,被其他的</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋體;">完全不該。</span></p><p>		3<span style="font-family:宋體;">)暫停:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋體;">可見,但是上一層還有其他的</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋體;">,沒有被完全覆蓋掉。</span></p><p>	Acitivity<span style="font-family:宋體;">聲明週期的方法:</span></p><p>		onCreate 	:創建時調用,或者程序在暫停、停止狀態下被殺死之後重新打開時也會調用</p><p>		onStart		:<span style="font-family:Times New Roman;">onCreate</span><span style="font-family:宋體;">之後或者從停止狀態恢復時調用</span></p><p>		onResume	:<span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋體;">之後或者從暫停狀態恢復時調用,從停止狀態恢復時由於調用</span><span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋體;">,也會調用</span><span style="font-family:Times New Roman;">onResume</span></p><p>		onPause		:進入暫停、停止狀態,或者銷燬時會調用</p><p>		onStop		:進入停止狀態,或者銷燬時會調用</p><p>		onDestroy	:銷燬時調用</p><p>		onRestart	    :從停止狀態恢復時調用</p><p>
</p><p>
</p><p>	個人理解</p><p><span style="white-space:pre">	</span>一個Activity從 死亡狀態 到 停止狀態 會運行<span style="font-family:Times New Roman;">onCreate</span><span style="font-family:宋體;">方法, (在這裏做初始化的工作)</span></p><p>		    從 停止狀態 到 暫停狀態 會運行<span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋體;">方法, </span></p><p>		    從 暫停狀態 到 運行狀態 會運行<span style="font-family:Times New Roman;">onResume</span><span style="font-family:宋體;">方法,</span></p><p>		    從 運行狀態 到 暫停狀態 會運行<span style="font-family:Times New Roman;">onPause</span><span style="font-family:宋體;">方法,</span></p><p>		    從 暫停狀態 到 停止狀態 會運行<span style="font-family:Times New Roman;">onStop</span><span style="font-family:宋體;">方法。</span></p><p>		    從 停止狀態 到 死亡狀態 會運行<span style="font-family:Times New Roman;">onDestroy</span><span style="font-family:宋體;">方法。(在這裏做保存數據的工作)</span></p><p>		    如果程序的生命存在過運行狀態那麼,從停止狀態到暫停狀態的時候會運行<span style="font-family:Times New Roman;">onRestart</span><span style="font-family:宋體;">,如果從來沒存在過運行狀態的話,就不會調用</span><span style="font-family:Times New Roman;">onRestart</span><span style="font-family:宋體;">。</span></p><p> </p><p>		</p><p> </p><p>橫豎屏的切換週期:</p><p>	安卓系統下默認的橫豎屏幕切換的動作時把之前的<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">銷燬,然後在創建新的符合屏幕狀態的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">。</span></p><p>	sereenOrientation="landscape/portrait"<span style="font-family:宋體;">指定橫</span><span style="font-family:Times New Roman;">/</span><span style="font-family:宋體;">豎屏幕,不可更改</span></p><p>	configChanges="orientation|keydoardHidden|screenSize" <span style="font-family:宋體;">指定 屏幕旋轉時不會從新創建,不會因爲鍵盤而擋住主屏幕,不會因爲屏幕的大小縮放</span></p><p>啓動模式:</p><p>	在<span style="font-family:Times New Roman;">AndroidManifest.xml</span><span style="font-family:宋體;">中的</span><span style="font-family:Times New Roman;"><activity></span><span style="font-family:宋體;">標籤中可以配置</span><span style="font-family:Times New Roman;">android:launchMode</span><span style="font-family:宋體;">屬性,用來控制</span><span style="font-family:Times New Roman;">Actvity</span><span style="font-family:宋體;">的啓動模式</span></p><p>	在Android系統中我們創建的Acitivity是以棧的形式呈現的</p><p>		standard<span style="font-family:宋體;">:每次調用</span><span style="font-family:Times New Roman;">startActivity()</span><span style="font-family:宋體;">啓動時都會創建一個新的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">放在棧頂</span></p><p>		singleTop<span style="font-family:宋體;">:啓動</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">時,指定</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">不在棧頂就創建,如在棧頂,則不再創建</span></p><p>		singleTask<span style="font-family:宋體;">:如果啓動的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">不存在就創建,如果存在直接跳轉到指定的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">所在位置</span></p><p>		singleInstance<span style="font-family:宋體;">:如果啓動的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">不存在就創建,如果存在就將指定的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋體;">移動到棧頂</span></p><p><span style="font-family:宋體;">
</span></p><p><span style="font-family:宋體;">
</span></p><p><span style="font-family:宋體;"></span><pre name="code" class="java"><p><span style="white-space:pre">		</span>onSaveInstanceState<span style="font-family: 宋體;">:在</span><span style="font-family: 'Times New Roman';">Activity</span><span style="font-family: 宋體;">被動的摧毀或停止的時候調用,用於保存運行數據,可以將數據存在在</span><span style="font-family: 'Times New Roman';">Bundle</span><span style="font-family: 宋體;">中</span></p><p>		onRestoreInstanceState<span style="font-family: 宋體;">:該方法在</span><span style="font-family: 'Times New Roman';">Activity</span><span style="font-family: 宋體;">被重新繪製的時候調用,例如改變屏幕方向,</span><span style="font-family: 'Times New Roman';">savedInstanceState</span><span style="font-family: 宋體;">爲</span><span style="font-family: 'Times New Roman';">onSaveInstanceState</span><span style="font-family: 宋體;">保存的數據</span></p>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章