Leo Yeh's Blog

軟體開發 Android Life Cycle (1)

基本介紹

教學目標

開發 Android 會面臨到網路傳輸的問題,當存取網路資源時,會使得 Activity 發生短暫停頓,畫面變黑的狀態,甚至強制終止應用程式 App,這些皆會給使用者操作體驗的印象非常的不良,因此要如何解決這種問題呢?

重點概念

為了解決上述問題,最好的方式就是了解 Android 生命週期,基本上可以分成 Activity 生命週期和 Process 生命週期。

Activity

首先在系統中的每個 Activity 會透過 Activity 堆疊進行管理,簡單來說,當有新的 Activity 被啟動後會被加入至 Activity 堆疊最上層,此時該 Activity 的狀態為 Running。

生命週期

有四種主要的狀態:

流程圖

Activity 狀態流程圖
Activity 狀態流程圖

開發重點

有三種主要的關鍵:

Process

當記憶體執行過低時,系統就會自動刪除比較不重要的 Process ,然而當 Activity 的 Running 狀態時, Process 會有狀態。

生命週期

有四種主要的狀態:
一般來說,基於 Activity 的 Running 狀態時,Process 會有四種狀態:

舉例來說,可能有相機的應用程式允許你上傳相片至網站,此時上傳可以會花費很長的時間,所以相機的應用程式會允許使用者先去處理其它的應用程式,並將相機的應用程式在背後持續執行,而當相片上傳完成後會開啟服務。也就是說系統會依照不同的階段 ( Paused 、 Stopped 和 Finished ) 給予 Process 適當的優先權。

Thread

在了解 Process 的生命週期之後,最後就要了解的就是 Thread , Thread 是平行的執行單元,稱之為執行緒,它有本身呼叫堆疊的方法被調用。每個 Thread 有參數和區域變數,簡單來說每個虛擬機器的實體都有至少一個主要的執行緒在開始時執行,此外應用程序可能為特定目的而決定啟動額外的執行緒。

而要實作的就是在 Activity 執行時,啟動 Process,再透過 Thread 執行 Socket 存取網路資源,整體看起來並沒有什麼問題,但是當網路傳輸的資料量過大時,就會發生問題,也就是 Application Not Responding ,簡稱 ANR ,簡單來說,當應用程式無法回應使用者的輸入,例如 I/O 操作,通常是網路連線 App 的程式區塊,然後主要的 App 執行緒會將不能夠處理的使用者輸入事件,在經過一段時間:

系統將會終結,應用程式被凍結,並且系統會顯示 ANR 的資訊給使用者關閉該應用程式 App。

解決方式

再了解 Activity 、 Process 和 Thread 的基本概念之後,回頭面對上述問題其實可以透過 StrictMode 確保主要的執行緒正常執行,但是若想避免這問題發生,基本上可透過非同步的網路方式進行資訊的傳輸,簡單來說就是透過 AsyncTask 類別進行非同步的網路傳輸。

相關資源

⬅️ Go back