根據運行的環境,操作系統可以分為桌面操作系統,手機操作系統,服務器操作系統,嵌入式操作系統等。 面向大眾的移動技術,第3部分 為您的Android移動應用程序添加導航樣式 安德魯·格洛弗 2013年7月25日發布 面向大眾的移動技術 請期待本系列的后續內容. 請期待本系列的后續內容. 近年來,移動應用程序發布和移動開發技術市場都在爆炸式增長. 本系列文章將向熟悉編程但對移動技術相對較新的開發人員介紹移動應用程序的開發. 首先使用Java?代碼對本機應用程序進行編碼,然后將該工具箱擴展為包括JVM語言,腳本框架,HTML5 / CSS / JavaScript,第三方工具等. 本系列文章將帶您逐步掌握這些必要的技術,并實際處理所有移動開發方案. 現在,移動設備的功能異常強大,比許多開發人員用來編寫其第一個程序的臺式計算機要強大得多. 因此,很容易忘記移動設備仍處于資源有限的環境中. 在開發移動應用程序時,您絕不能忘記應用程序運行環境的限制. 尤其是當某個應用程序想要與其他應用程序競爭系統資源時,其中某些應用程序對您的日常行為比您的行為更為重要. 確保應用程序流行的方法之一是確保其節省系統資源. 在Android中,使用和維護系統資源的機制是Activity類. 您對基本類的生命周期了解得越多(與Java Servlet非常相似),您就越有能力調整Android移動應用程序的資源使用率和性能. 我們將從快速了解Activity類的生命周期開始. 通過示例應用程序的演示,您將學習如何處理Android應用程序生命周期的每個階段. 掌握了這些方法的原理后,您就可以明智地使用系統資源了. 然后更新演示應用程序的導航系統,并使用操作圖標代替菜單按鈕來實現用戶交互. 圖標在移動應用程序UI中是非常標準的,并且較新的Android設備(版本4.2.2及更高版本)已放棄選項菜單,而是使用操作欄. 知道如何將這些功能與您的Android移動應用程序集成將使您受益! Activity的生命周期直接對應于Android移動應用程序的生命周期. 當用戶與應用程序或運行該應用程序的設備進行交互時,Android平臺將在Activity實例上執行回調. 當用戶啟動應用程序時,初始活動將執行定義的生命周期. 當應用程序進入后臺時,它執行生命周期的不同階段,而當應用程序關閉時,它執行另一個階段. 顯示了每個交互階段的Android Activity生命周期. Android移動應用程序生命周期包括四個階段: 以下內容將描述每個階段及其回調方法(可以在Activity實例內部實現). 如果您一直在關注本系列文章,那么您已經在本系列的第一篇和第二篇文章中創建了自己的演示應用程序. 如果沒有演示應用程序,建議您先創建一個演示應用程序,然后再繼續. 或者,您可以復制我自己的Overheard Word演示應用程序的Git庫(請參閱參考資料). 在上一篇文章中,您使用了與啟動Activity相對應的回調方法,即onCreate. 您可能還熟悉onStart和onResume,并且在啟動時也調用了這兩種方法. 現在,在“活動”生命周期的上下文中考慮這些方法. 在Eclipse Android開發環境中,選擇Override / Implement Methods ...選項來輕松地重寫方法,如圖所示. 接下來,選擇onStart和onResume方法: 現在像我一樣使用Android Log類添加一些跟蹤語句. @Override protected void onResume() { super.onResume(); Log.d("overheardword", "onResume Invoked"); } @Override protected void onStart() { super.onStart(); Log.d("overheardword", "onStart Invoked"); } 啟動應用程序的實例,并通過LogCat查看日志以檢查結果,如圖所示. Android擁有自己的日志記錄系統android.util.Log. 使用此方便的類,您可以記錄各種級別的日志(例如信息,警告,調試等),然后通過Android SDK隨附的logcat工具查看日志. 在Eclipse中,您應該將LogCat視為可用于過濾標簽和應用程序實例的選項卡. 只要將設備插入臺式機或筆記本電腦的USB插座,LogCat還支持訪問設備上的日志. 您可能已經猜到了onCreate將在首次加載應用程序時被調用android應用程序周期,并且在其他階段的上下文中(例如,當應用程序進入后臺并重新啟動時)使用onStart和onResume更方便. 由于移動設備通常運行多個應用程序,并且它們以各種方式吸引用戶的注意力,因此您的應用程序應該知道何時讓另一個應用程序占據設備屏幕并使用更多資源. 有時,用戶在使用該應用程序時需要接聽電話,否則該應用程序可能會彈出一個對話框,例如信息請求或錯誤消息. 上述每個操作都會部分阻止當前的活動. 當活動被部分阻止時,將調用onPause方法. 當暫停的活動重新獲得焦點時,將調用onResume. 暫停和恢復表明受影響的活動被部分阻止,而不是完全隱藏. 當應用程序被完全隱藏(例如,用戶調用)時,也會調用onPause,但在這種情況下,它將繼續調用onStop. 當應用程序再次進入前臺時,它將首先調用onRestart,然后調用onStart,最后調用onResume. 以下內容說明了實現onPause,onRestart和onStop時發生的情況. 如果本系列文章中已經使用了Android應用程序,請在代碼中添加一些日志語句,然后運行該應用程序. 按“主頁”按鈕完全隱藏該實例,然后單擊其圖標以再次運行它. 您應該看到一系列稱為的方法. 您看到的第一件事是onPause,然后是onStop. 單擊圖標重新運行應用程序時,調用的方法是onRestart,onStart和onResume. 破壞活動也是在運行應用程序的正常過程中發生的事情. 例如android應用程序周期,您可以調用Activity實例的finish方法來終止該實例. 這里的關鍵在于,由于活動是封閉的,因此它將遵循與隱藏相同的生命周期,但最終將回調onDestroy. 在其中,我使用了Overheard Word應用程序(請參閱“面向公眾的移動技術: 輕掃!”或從Github獲取資源)來演示該過程,當手勢向上滑動Finish方法時將調用該過程. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { final SwipeDetector detector = new SwipeDetector(e1, e2, velocityX, velocityY); if (detector.isDownSwipe()) { return false; }else if (detector.isUpSwipe()) { finish(); }else if (detector.isLeftSwipe()) { Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show(); }else if (detector.isRightSwipe()) { Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { // nothing } return false; } 最常用的Activity生命周期方法是onCreate,onRestart和onDestroy. 例如,我使用onRestart刷新應用程序UI視圖的許多方面之一,并使用onDestroy釋放到的連接,例如在Android設備上本地運行的SQLite. 現在可能并不明顯,但是一旦您開始與外部資源(例如外部Web服務或設備的文件系統或)協作,這些生命周期階段將變得非常重要. 接下來,說明如何使用兩個Activity鉤子方法onCreateOptionsMenu和onOptionsItemSelected來實現應用程序菜單行為. 同步完這兩種方法后,我們會將它們的功能連接到圖標上,以實現其他UI效果. 當我在Eclipse中創建Overheard Word項目時,定義的第一個活動在onCreateOptionsMenu上有一個存根方法. 您可能會猜到,此方法用于創建選項菜單. 在較舊的Android設備上,選項菜單由“菜單”按鈕表示. 在較新的設備上,它表示為在應用程序本身中顯示的一系列垂直點. 較新的Android設備不一定具有菜單按鈕. 在代表舊設備的的示例中,有一個名為“菜單”的按鈕. 單擊后,應用程序實例將顯示選項菜單. 在此示例中,我們將看到導航選項. 例如,如果用戶按下“主頁”按鈕,他們將看到顯示的內容. 平板電腦上沒有菜單按鈕. 用戶無法從菜單中選擇項目,但被要求啟動各種操作. 較新的UI欄稱為操作欄,如圖所示. 盡管菜單按鈕的行為與操作欄相似,但操作欄只能在較新的設備上實現. 由于我們的目標是Android系統的舊版本(請記住,大約50%的Android設備運行Gingerbread!),因此我將使用更加熟悉的菜單按鈕進行演示. 稍后,我將說明如何更新導航代碼以實現操作欄,以滿足您針對較新版本的Android和相應設備的需求. 為了翻新Overheard Word以提高用戶交互的效率,第一步是實現選項菜單,以便用戶可以退出應用程序. 退出應用程序是Activity生命周期的階段之一,因此我們將使用Activity方法來實現此功能. 請記住,在Android應用程序中,所有與UI相關的業務都對應一個XML文件,因此定義UI的方法是編輯布局XML文件. Android應用程序的XML文件位于項目的res文件夾中的特定目錄中(例如,布局文件位于布局目錄中). 作為快速練習,您可以查看Overheard Word主要活動中onCreateOptionsMenu方法的默認實現-您看到了什么? public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.overheard_word, menu); return true; } 如果您要在菜單資源目錄中查找名為overheard_word.xml的XML文件,那么您距離成為Android專家還很近! 接下來,我們將編輯菜單資源XML文件并添加一個名為quit的菜單項. 您首先需要在res / values目錄中找到strings.xml文件. 找到它之后,創建一個新項目,如下所示: <string name="quit_menu">Quit</string> 此標記定義了退出這個詞,可以由標識符quit_menu引用(順便說一句,這對于應用程序的國際化非常有用). 接下來,在菜單目錄中打開overheard_word.xml文件. 在此文件中,將標題更改為@ string / quit_menu以將單詞Quit鏈接到菜單項. 現在,啟動,然后按菜單按鈕. 您應該看到一個菜單出現在屏幕底部,帶有一個選項: 退出. 但是選擇它沒有效果,因為它尚未實現. 我們將在一分鐘內添加Quit選項的實現代碼. 但是首先,我們必須考慮移動應用程序任何功能部分的另一個重要元素,即外觀. 您可能已經注意到,大量的移動UI(甚至越來越多的Web應用程序UI)現在都使用圖標進行導航. 下面說明了如何用免費圖標替換通用單詞按鈕.
|
溫馨提示:喜歡本站的話,請收藏一下本站!