Android應(yīng)用程序需不需要手動(dòng)退出?

0 評(píng)論 6450 瀏覽 0 收藏 11 分鐘

不止一次,也不止一個(gè)人問過這個(gè)問題。我都回答了:不需要。但是,還是要記錄下來。

我們不妨從了解這個(gè)系統(tǒng)對(duì)于應(yīng)用程序管理的一些內(nèi)部機(jī)制開始說明原因。

對(duì)于Android系統(tǒng)而言,包含“進(jìn)程”和“服務(wù)”。“進(jìn)程”有正在運(yùn)行的,也有剛剛離開在后臺(tái)緩存的?!胺?wù)”是一個(gè)無界面、長(zhǎng)時(shí)間運(yùn)行的應(yīng)用功能,并且不會(huì)輕易被終止。

我們知道,在Android中可以快速通過主頁鍵(home)或者使用返回鍵(←)逐步離開應(yīng)用程序。

主頁鍵:
在當(dāng)前運(yùn)行的應(yīng)用程序的任意界面,按下主頁鍵會(huì)快速回到手機(jī)主屏幕。同時(shí)這個(gè)應(yīng)用程序的進(jìn)程將在后臺(tái)被暫停并建立緩存,再次啟動(dòng)應(yīng)用程序時(shí)可以方便地返回剛才的界面。(現(xiàn)場(chǎng)被保留)
當(dāng)然,在你按下主頁鍵回到手機(jī)主屏幕時(shí),因設(shè)計(jì)需要,也有可能會(huì)在后臺(tái)運(yùn)行一個(gè)甚至多個(gè)進(jìn)程和服務(wù),以保證這個(gè)應(yīng)用程序在后臺(tái)是“活的”。

盡管我們知道了后臺(tái)會(huì)產(chǎn)生各種各樣的“進(jìn)程”與“服務(wù)”,但你并不用擔(dān)心它們會(huì)把你的手機(jī)拖累。當(dāng)運(yùn)行新的應(yīng)用程序發(fā)現(xiàn)內(nèi)存可能不夠用時(shí),系統(tǒng)會(huì)自動(dòng)在后臺(tái)釋放部分緩存在后臺(tái)的進(jìn)程,以保障可運(yùn)行新的應(yīng)用程序。這是一個(gè)智能的、良性的供給體系。

返回鍵:
Android系統(tǒng)使用返回鍵來進(jìn)行屏幕后退,以及關(guān)閉對(duì)話框/菜單/屏幕鍵盤。
對(duì)于傳統(tǒng)的本地客戶端應(yīng)用程序,每個(gè)屏幕可以理解為一個(gè)活動(dòng)(Activity)。通過返回鍵可以快速回退到當(dāng)前應(yīng)用程序的上一個(gè)活動(dòng),也可以離開當(dāng)前應(yīng)用程序打開的新的應(yīng)用程序的某個(gè)活動(dòng)。

所有的活動(dòng)呈堆棧結(jié)構(gòu)(一種串行形式的數(shù)據(jù)結(jié)構(gòu)),正在運(yùn)行的活動(dòng)處在最頂端。當(dāng)你按下返回鍵,會(huì)清除當(dāng)前活動(dòng)并恢復(fù)上一個(gè)活動(dòng)。如下圖示例:


(配圖出處:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )

 

如果你連續(xù)按返回鍵,活動(dòng)一個(gè)個(gè)被抽離,就像剝洋蔥一樣。

在Android的應(yīng)用程序里,可以通過“意圖”功能,在當(dāng)前應(yīng)用程序(任務(wù))的某個(gè)活動(dòng)啟動(dòng)另一個(gè)應(yīng)用程序(任務(wù))的某個(gè)活動(dòng)。
比如下圖的示例,在“有道詞典”主界面單擊超鏈接“意見反饋”打開瀏覽器訪問目標(biāo)網(wǎng)頁:

Android應(yīng)用程序需不需要手動(dòng)退出? - 阿智 - (((azero)))

 

在目標(biāo)網(wǎng)頁界面,你可以使用返回鍵快速返回剛才的“有道詞典”主界面。

而接下來這個(gè)例子,體驗(yàn)則是非常糟糕的:

Android應(yīng)用程序需不需要手動(dòng)退出? - 阿智 - (((azero)))

 

如上圖,在目標(biāo)網(wǎng)頁想要返回上一個(gè)任務(wù)需要?dú)v經(jīng)幾番周折。
一遍又一遍地回退瀏覽器的瀏覽歷史,甚至還要回到瀏覽器的起始頁,然后彈出一個(gè)對(duì)話框詢問是否要退出……
天哪!我快要瘋掉了。

Android官方對(duì)于多個(gè)任務(wù)間的活動(dòng)堆棧處理機(jī)制,可以看下面這張圖來解釋:

Android應(yīng)用程序需不需要手動(dòng)退出? - 阿智 - (((azero)))

(配圖出處:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )

從圖中我們可以看到,一開始在后臺(tái)的“任務(wù)B”的“活動(dòng)Y”經(jīng)由“任務(wù)A”的“活動(dòng)2”的一個(gè)按鈕抽調(diào)到了前臺(tái),而隨著“任務(wù)B”的活動(dòng)一個(gè)個(gè)被剝離,最終整個(gè)“任務(wù)B”被結(jié)束了,并且使用返回鍵又回到了“任務(wù)A”的“活動(dòng)2”。

返回鍵實(shí)現(xiàn)了調(diào)用新任務(wù)之后快速返回的便利,而不是只能迂回地回到應(yīng)用程序列表并找到上一個(gè)使用的應(yīng)用程序再次啟動(dòng)。

當(dāng)所有的活動(dòng)從堆棧中清除,任務(wù)結(jié)束。也就是說,在應(yīng)用程序的主界面按下返回鍵時(shí),應(yīng)用程序就已經(jīng)退出了。
除非,這個(gè)應(yīng)用程序設(shè)計(jì)了后臺(tái)運(yùn)行的進(jìn)程和服務(wù)。比如”新浪微博”,即使你在應(yīng)用程序主界面按下返回鍵退出了,在“程序管理”>“正在運(yùn)行”界面上仍然可以看到正在運(yùn)行的進(jìn)程和服務(wù)。(需通過菜單鍵切換至“顯示當(dāng)前運(yùn)行的服務(wù)”視圖)

正如上面提到的,后臺(tái)服務(wù)是一個(gè)無界面、長(zhǎng)時(shí)間運(yùn)行的應(yīng)用功能,并且不會(huì)輕易被終止,即便你使用“任務(wù)管理器”。(其實(shí)可以在“服務(wù)”界面找到它并且手動(dòng)停止服務(wù),只不過沒有這個(gè)必要性,交給系統(tǒng)自動(dòng)處理即可。長(zhǎng)時(shí)間不使用某個(gè)任務(wù)時(shí),系統(tǒng)會(huì)認(rèn)為你已經(jīng)不再需要了并且會(huì)自動(dòng)幫你結(jié)束。)

至此,我們已經(jīng)知道為什么Android應(yīng)用程序不需要手動(dòng)退出了。因?yàn)槁斆鞯南到y(tǒng)已經(jīng)幫助用戶做了許多事情,包括退出應(yīng)用程序以及恢復(fù)可用內(nèi)存。

受限于Android官方對(duì)設(shè)計(jì)規(guī)范的態(tài)度,Android并沒有像iOS那樣明文告訴設(shè)計(jì)者不需要這個(gè)不需要那個(gè)。Android應(yīng)用程序的設(shè)計(jì)模式也因此而“百花齊放”,很難形成較為統(tǒng)一的體驗(yàn)。比如本文提到的需不需要手動(dòng)退出Android應(yīng)用程序的話題,如果在iOS中看到屏幕上有退出應(yīng)用程序的按鈕,是一件搞笑的事情。

無論如何,Android也好iOS也罷,用戶本來就不需要關(guān)注“進(jìn)程”或“內(nèi)存管理”、“任務(wù)管理”這些東西。用完,離開界面即可,就這么簡(jiǎn)單!把用戶不需要關(guān)注的問題拋給用戶,無異于“不想讓小孩玩火,但是又給他一個(gè)打火機(jī)?!?br />
而設(shè)計(jì)師們,該做些什么了。改變吧!

看到這里,也許你會(huì)問:既然Android應(yīng)用程序在后臺(tái)被掛起暫停了,但是為何開多了應(yīng)用程序手機(jī)還是會(huì)變慢呢?

一方面:新運(yùn)行的應(yīng)用程序如果需要較大的內(nèi)存,自然會(huì)比較慢。另外,如果手機(jī)本身的內(nèi)存過小且CPU不給力,系統(tǒng)自然會(huì)因較頻繁地自動(dòng)結(jié)束進(jìn)程釋放緩存而導(dǎo)致手機(jī)在某些時(shí)候運(yùn)行比較慢的感覺。
也正因?yàn)檫@樣,我們知道了為什么“任務(wù)管理器”會(huì)如此流行,甚至成了“裝機(jī)必備”。人們用它來快速提前釋放緩存以保證運(yùn)行新應(yīng)用程序時(shí)有足夠的內(nèi)存。當(dāng)然,隨著CPU頻率越來越高,內(nèi)存越來越大的發(fā)展趨勢(shì),手動(dòng)清除緩存已經(jīng)慢慢變得不再需要。
另一方面:臨時(shí)啟動(dòng)的后臺(tái)服務(wù)可能會(huì)導(dǎo)致手機(jī)變慢。有些應(yīng)用程序在后臺(tái)監(jiān)聽到指定的事件會(huì)自動(dòng)啟動(dòng),比如操作系統(tǒng)本身的“Google服務(wù)”,又比如連接USB并且在PC上啟動(dòng)“豌豆莢手機(jī)精靈”,手機(jī)上的“豌豆莢守護(hù)精靈”會(huì)自動(dòng)啟動(dòng)。為了避免這種情況,只能建議你有選擇性的安裝應(yīng)用程序了。聰明的軟件需要先進(jìn)的硬件來支持。

也許你又會(huì)問:既然在應(yīng)用程序主界面用返回鍵可以直接退出應(yīng)用程序,可是為什么某Android應(yīng)用程序(尤其是國(guó)內(nèi)的)要彈出退出確認(rèn)對(duì)話框呢?

這其實(shí)更多的是產(chǎn)品人出于不希望自己的應(yīng)用程序太容易被用戶“退出”,或是擔(dān)心“誤操作”的原因,為此給用戶增加一道障礙墻。
瞧瞧我們眼前的PC軟件吧!單擊窗口右上角的 X 圖標(biāo)后,也有不少軟件在做同樣的事情呢。

毫不客氣地說,這是典型的把責(zé)任推卸給用戶的做法。似乎在警告用戶:“真的要退出了?確定的話我就不管你了!”

我們應(yīng)該盡可能少使用對(duì)話框,提供必要的容錯(cuò)支持。允許用戶犯錯(cuò),并給予恢復(fù)的機(jī)會(huì)。比如你可以允許用戶在按下返回鍵離開應(yīng)用程序后還能再次返回現(xiàn)場(chǎng)。這在很多優(yōu)秀的第三方應(yīng)用程序上均有體現(xiàn),比如Twitter、米聊……

當(dāng)然,沉浸式的應(yīng)用程序除外。比如視頻正在播放或者游戲正在進(jìn)行的畫面,應(yīng)盡可能地不要讓用戶犯錯(cuò)被退出。沉浸式的應(yīng)用程序應(yīng)提供沉浸式的保障,因?yàn)橛螒蚧螂娪斑M(jìn)行到一半被退出往往是無法返回現(xiàn)場(chǎng)的。

最后,補(bǔ)充說明:本文所說的“退出”是指退出應(yīng)用程序,而不是指退出帳戶的登錄狀態(tài)。如果你的應(yīng)用程序是需要用戶使用帳號(hào)密碼登錄的,那么提供“退出登錄”(或叫“注銷”)的功能是必要的。

來源:http://azero.tsang.blog.163.com/blog/static/47005201172411138111/

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!