不止一次,也不止一個人問過這個問題。我都回答了:不需要。但是,還是要記錄下來。
我們不妨從瞭解這個系統對於應用程式管理的一些內部機制開始說明原因。
對於Android系統而言,包含“進程”和“服務”。“進程”有正在啟動並執行,也有剛剛離開在後台緩衝的。“服務”是一個無介面、長時間啟動並執行應用功能,並且不會輕易被終止。
我們知道,在Android中可以快速通過首頁鍵(home)或者使用返回鍵(←)逐步離開應用程式。
首頁鍵:
在當前啟動並執行應用程式的任意介面,按下首頁鍵會快速回到手機主畫面。同時這個應用程式的進程將在後台被暫停並建立緩衝,再次啟動應用程式時可以方便地返回剛才的介面。(現場被保留)
當然,在你按下首頁鍵回到手機主畫面時,因設計需要,也有可能會在後台運行一個甚至多個進程和服務,以保證這個應用程式在後台是“活的”。
儘管我們知道了後台會產生各種各樣的“進程”與“服務”,但你並不用擔心它們會把你的手機拖累。當運行新的應用程式發現記憶體可能不夠用時,系統會自動在後台釋放部分緩衝在背景進程,以保障可運行新的應用程式。這是一個智能的、良性的供給體系。
返回鍵:
Android系統使用返回鍵來進行螢幕後退,以及關閉對話方塊/菜單/螢幕小鍵盤。
對於傳統的本地用戶端應用程式,每個螢幕可以理解為一個活動(Activity)。通過返回鍵可以快速回退到當前應用程式的上一個活動,也可以離開當前應用程式開啟的新的應用程式的某個活動。
所有的活動呈堆棧結構(一種串列形式的資料結構),正在啟動並執行活動處在最頂端。當你按下返回鍵,會清除當前活動並恢複上一個活動。如下圖樣本:
(配圖出處:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )
如果你連續按返回鍵,活動一個個被抽離,就像剝洋蔥一樣。
在Android的應用程式裡,可以通過“意圖”功能,在當前應用程式(任務)的某個活動啟動另一個應用程式(任務)的某個活動。
比如下圖的樣本,在“有道詞典”主介面單擊超連結“意見反饋”開啟瀏覽器訪問目標網頁:
在目標網頁介面,你可以使用返回鍵快速返回剛才的“有道詞典”主介面。
而接下來這個例子,體驗則是非常糟糕的:
如上圖,在目標網頁想要返回上一個任務需要曆經幾番周折。
一遍又一遍地回退瀏覽器的瀏覽曆史,甚至還要回到瀏覽器的起始頁,然後彈出一個對話方塊詢問是否要退出……
天哪!我快要瘋掉了。
Android官方對於多個任務間的活動堆棧處理機制,可以看下面這張圖來解釋:
(配圖出處:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )
從圖中我們可以看到,一開始在背景“任務B”的“活動Y”經由“任務A”的“活動2”的一個按鈕抽調到了前台,而隨著“任務B”的活動一個個被剝離,最終整個“任務B”被結束了,並且使用返回鍵又回到了“任務A”的“活動2”。
返回鍵實現了調用新任務之後快速返回的便利,而不是只能迂迴地回到應用程式列表並找到上一個使用的應用程式再次啟動。
當所有的活動從堆棧中清除,任務結束。也就是說,在應用程式的主介面按下返回鍵時,應用程式就已經退出了。
除非,這個應用程式設計了後台啟動並執行進程和服務。比如“新浪微博”,即使你在應用程式主介面按下返回鍵退出了,在“程式管理”》“正在運行”介面上仍然可以看到正在啟動並執行進程和服務。(需通過菜單鍵切換至“顯示當前啟動並執行服務”視圖)
正如上面提到的,後台服務是一個無介面、長時間啟動並執行應用功能,並且不會輕易被終止,即便你使用“工作管理員”。(其實可以在“服務”介面找到它並且手動停止服務,只不過沒有這個必要性,交給系統自動處理即可。長時間不使用某個任務時,系統會認為你已經不再需要了並且會自動幫你結束。)
至此,我們已經知道為什麼Android應用程式不需要手動退出了。因為聰明的系統已經協助使用者做了許多事情,包括退出應用程式以及恢複可用記憶體。
受限於Android官方對設計規範的態度,Android並沒有像iOS那樣明文告訴設計者不需要這個不需要那個。Android應用程式的設計模式也因此而“百花齊放”,很難形成較為統一的體驗。比如本文提到的需不需要手動退出Android應用程式的話題,如果在iOS中看到螢幕上有退出應用程式的按鈕,是一件搞笑的事情。
無論如何,Android也好iOS也罷,使用者本來就不需要關注“進程”或“記憶體管理”、“任務管理”這些東西。用完,離開介面即可,就這麼簡單!把使用者不需要關注的問題拋給使用者,無異於“不想讓小孩玩火,但是又給他一個打火機。”
而設計師們,該做些什麼了。改變吧!
看到這裡,也許你會問:既然Android應用程式在後台被掛起暫停了,但是為何開多了應用程式手機還是會變慢呢?
一方面:新啟動並執行應用程式如果需要較大的記憶體,自然會比較慢。另外,如果手機本身的記憶體過小且CPU不給力,系統自然會因較頻繁地自動結束進程釋放緩衝而導致手機在某些時候運行比較慢的感覺。
也正因為這樣,我們知道了為什麼“工作管理員”會如此流行,甚至成了“裝機必備”。人們用它來快速提前釋放緩衝以保證運行新應用程式時有足夠的記憶體。當然,隨著CPU頻率越來越高,記憶體越來越大的發展趨勢,手動清除緩衝已經慢慢變得不再需要。
另一方面:臨時啟動的後台服務可能會導致手機變慢。有些應用程式在後台監聽到指定的事件會自動啟動,比如作業系統本身的“Google服務”,又比如串連USB並且在PC上啟動“豌豆莢手機精靈”,手機上的“豌豆莢守護精靈”會自動啟動。為了避免這種情況,只能建議你有選擇性的安裝應用程式了。聰明的軟體需要先進的硬體來支援。
也許你又會問:既然在應用程式主介面用返回鍵可以直接退出應用程式,可是為什麼某Android應用程式(尤其是國內的)要彈出退出確認對話方塊呢?
這其實更多的是產品人出於不希望自己的應用程式太容易被使用者“退出”,或是擔心“誤操作”的原因,為此給使用者增加一道障礙牆。
瞧瞧我們眼前的PC軟體吧!單擊視窗右上方的 X 表徵圖後,也有不少軟體在做同樣的事情呢。
毫不客氣地說,這是典型的把責任推卸給使用者的做法。似乎在警告使用者:“真的要退出了?確定的話我就不管你了!”
我們應該儘可能少使用對話方塊,提供必要的容錯支援。允許使用者犯錯,並給予恢複的機會。比如你可以允許使用者在按下返回鍵離開應用程式後還能再次返回現場。這在很多優秀的第三方應用程式上均有體現,比如Twitter、米聊……
當然,沈浸式的應用程式除外。比如視頻現正播放或者遊戲進行中的畫面,應儘可能地不要讓使用者犯錯被退出。沈浸式的應用程式應提供沈浸式的保障,因為遊戲或電影進行到一半被退出往往是無法返回現場的。
最後,補充說明:本文所說的“退出”是指退出應用程式,而不是指退出帳戶的登入狀態。如果你的應用程式是需要使用者使用帳號密碼登入的,那麼提供“退出登入”(或叫“登出”)的功能是必要的。
文章來源:azero.tsang.blog.163.com 轉載請註明出處連結。