編輯:關於Android編程
從事android開發兩年有余,但是自己的代碼自己卻不太敢恭維。於是我不得不來改善我的Android程序,為了使它變得更加的穩固,更加的專業。本文旁征博引,多處觀點都是Google之,結合自己的經驗總結了Android開發中的一些最佳實踐,厚積方能博發,多積累多學習才能多進步。
Android Activity 的生命周期
生命周期(Lifecycle)描述的是Android一個頁面從開始創建到消亡的整個過程。伴隨著一系列對象的創建及消失,涵蓋著整個頁面所包含的業務邏輯。以及與用戶之間的交互,接受用戶的輸入並返回輸出信息給用戶。
從其生命流程圖中,我們可以看到Android單個Activity的生命周期主要為 onCreate -> onStart -> onResume -> Activity Running -> onPause -> onStop -> onDestroy. 通常單個App是由諸多的Activity組成的,一般情況我們肉眼所見的一個頁面就是一個Activity,我們也經常再APP中點擊Button或者Back,於是我們實現了Activity之間的切換。
1. onCreate()與onDestroy()
如何理解onCreate()呢?首先通過來自Google的官方解釋來看onCreate()方法的作用:
onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource defining your UI, and using findViewById(int) to retrieve the widgets in that UI that you need to interact with programmatically
所以onCreate方法主要用於初始化我們的Activity。在onCreate()方法中,我們通過setContentView(int)來為當前的Activity指定對應的View, 然後通過findViewById(int)通過id檢索當前View中的組件。至此,onCreate()的一些基本的初始化工作完成, Activity全局的初始化工作應該都在onCreate()中完成,這些初始化狀態一直會被保存直到onDestroy()被調用,也就意味著Activity消亡。
細心觀察發現,Activity的onCreate(Bundle)函數會有一個Bundle類型的參數savedInstanceState,通過這個meaningful的名字可以看到此參數主要用於使用之前保存的數據。
與onCreate()對應的方法是onDestroy(), 後者主要是Activity被銷毀時會被執行的方法,當我們調用this.finish()手動結束當前的Activity, 此時onDestroy()會被回調,我們可以在這裡面做一些程序被銷毀前的保存性操作。
2. onStart()與onStop()
這兩種狀態一般出現在,當用戶從Activity A 跳轉到Activity B 中,此時Activity A 的 onStop函數會被回調,此時Activity A 被壓入到堆棧中,並處於不可見狀態。一旦用戶結束Activity B, 再次進入Activity A 中,系統會重新調用onRestart()和onStart()函數,於是這個Activity重新被喚醒。
3. onResume()與onPause()
通過字面意思理解為Activity的恢復和停止,一個典型的例子是APP運行過程中突然有電話或者鬧鈴,以至於當前的Activity被其他的Activity覆蓋,這種情況下會觸發onResume()和onPause()事件,當然如果APP經歷onStart()和onStop()事件,也必然會先經過onResume()和onPause()事件。生命周期的流程圖如上圖所示,其形成的是一個完成的閉路。
通過應用程序的一套完整的Lifecycle,Android保證了APP在手機上進行良好的運行,並且運行過程互不干擾。Android生命周期的存在也表明在APP開發中,應該使Activity功能彼此對應,在onStart()中注冊了某些事件,在onStop()中就應該進行反注冊,例如地圖開發中的GPS定位,就需要在onStart中進行注冊,而在onStop()中進行反注冊。還有一些網絡訪問回調也存在類似的情形,都需要我們在APP開發中注意,確保APP以最佳的狀態運行。
Activity的職能-避免Activity類承載太多職能
Activity作為Android的Controller,直接負載著與用戶的交互過程。開發中Activitiy很容易由於大量的動畫,布局等操作而變得臃腫,特別使業務邏輯漸漸復雜時,Activity過大的代碼量增加了維護成本,甚至開發者自己都很難讀懂這個Activity真正的含義。為了避免這種情況,我們要盡量將純UI布局和動畫邏輯分離到第三方類中,在Activity與用戶交互過程中,一旦需要某些UI操作和動畫表現等,直接對其相關的UI布局等進行調用即可。我們的Activity只作為真正的Controller,控制著接收用戶輸入以及反饋輸出,至於中間的邏輯則完全可以交給“Presenter”調用。
Android布局多屏適配
Android由於設備眾多,分辨率眾多,不同廠家定制的SDK也增加了適配成本。所以我們開發過程,就不應該使用太過絕對的布局,而應該盡量使用相對布局。過於絕對的布局可能在當前設備上表現良好,一旦在其他機器上運行則可能會出現布局錯亂的問題。布局時也要避免View之間的深嵌套,根據你的設計圖選擇合適的布局方式,過重的布局會拖慢頁面的渲染速度,進而影響整個APP的性能表現。
用Fragment代替Activity
自Android4.0之後,Android開始使用Fragment,並保持不斷更新中。簡言之,Fragment也是可以直接代替Activity的Controller,Fragment主要是為了適配手機和平板而生的,Fragment在手機上和Activity的表現無異,但是在平板上卻可以以類似於組件的形式表現出來,這種形式更適合平板的大屏顯示方式。Fragment讓我們不用去同時維護手機和平板上的兩套代碼,方便了開發過程。
MVC最佳實踐
和Web開發中的MVC框架類似,我們同樣可以對APP進行MVC化。具體而言,Activity是我們的Controller控制器,而對數據的讀取與查詢等具體語句則應該通過DataManager進行處理,類似於我們通常所說的Service,Service不直接和界面進行交互。用戶的交互都是與Activity發生的,Service會提供一些數據讀取相關的方法,以供Activity調用。
本章內容 第1節 Toast提示框 第2節 AlertDialog對話框 第3節 特色對話框 第4節 自定義對話框本章目標 熟練掌握Toast的用法。 熟練掌握Dialo
本文實例為大家分享了Android登錄郵箱自動補全功能的實現方法,供大家參考,具體內容如下效果:實現原理:1、繼承重寫簡單控件AutoCompleteTextView2、
因為之前工作項目開發都是適應eclipse開發android的。用習慣了,一時半會不是很好適應android studio編譯器。所以把android studio常用設
Unity本身沒有自帶Toast.makeText()的接口方法,但是這個小功能又是我們做手游開發的時候經常需要用到的。這時候我們可以利用Android Studio或者