同樣是採用墓碑機制,Windows Phone 8和iOS的多任務性能為什麼會有較大的差別?

Lumia 720是屬於WP8陣營中的低端配置,512MB的RAM,根據實際的使用經驗,先後開啟兩三個應用(比如QQ、微信、UC瀏覽器、Zaker等常用軟體)後,使用一段時間再返回到第一個應用時就會出現「正在恢復」,需要等待若干秒時間,對使用體驗有一定減分。而在iOS上,同樣是512M的iPhone 4s在開啟很多的應用後依然可以自如切換,且幾乎無卡頓。為什麼會有這樣的差別呢?


使用一段時間再返回到第一個應用時就會出現「正在恢復」,需要等待若干秒時間

這事(所謂的墓碑機制帶來的載入時間)同樣出現於iOS,乃至Android上,只是你沒有注意到,而「不希望你注意」可能是在開發iOS的人預料之內的。

除此以外,在Windows Phone 8.1以前似乎是這麼做的:

長按返回鍵調出多任務切換,會使用快速恢復,也就是直接從下文「暫停」的狀態開始

如果是在啟動器里進入,則會新開一個進程,之前「暫停」的會被殺掉

但開發者可以指定總是使用快速恢復

然後8.1開始有些不同

Windows phone 8 Fast Resume 快速恢復淺析(一)

Platform compatibility and breaking changes for Windows Phone Silverlight 8.1 apps

Silverlight 8.1 apps resume instead of replace on relaunch

On Windows Phone 8, the default behavior when the user launches an app from the Apps list or its primary tile is for a new instance of the app to be launched, replacing any existing instance of the app. Developers could override this behavior by modifying the app manifest, described in Enabling Fast Resume in the app manifest file.

A Silverlight 8.1 app is always resumed when launched, instead of replacing any running instance.

However, Silverlight 8.1 and Windows Phone 8 apps are terminated when the user uses the Back button to navigate backward past the first page of the app. After an app is terminated this way, any launch of the app will result in a new instance being created.

---------

墓碑機制常見於移動設備這種內存/電能資源有限的平台。

通常,不在前台的程序不會運行,但系統也不會殺掉它,而是儘可能將其保留在內存里。這些暫停的程序的優先順序非常低,只要系統需要內存,就會優先殺掉它們

這就是『開啟很多的應用後依然可以自如切換,且幾乎無卡頓』的來源,因為它們根本就沒退出。

既然很容易出現「殺掉暫停著的程序」的情況,就需要一個機制保存它們暫停時所處的狀態。這就是墓碑的職責。

這就是『出現「正在恢復」』的原因。此時進程已經被殺掉,需要重新運行,並回復到墓碑所記錄的狀態。WP有明確的聲明為墓碑(Tombstone)的一回事,Android/iOS有類似的機制,但不使用"墓碑"這個稱呼。Android的「tombstone」似乎是一個記錄程序崩潰時狀態的工具。

就iOS而言,從暫停恢復和墓碑恢復,由系統控制的界面(如進入動畫)上沒有差異。進入程序後,程序如何處理墓碑,則由開發者決定,這部分好像與WP8/Android沒有本質區別。

比方說,Android的墓碑的主要邏輯放在Activity生命周期里(而不是針對整個應用程序而言的),onDestroy()里要放上Activity在銷毀之前需要保存的信息。


手機占坑,中午pc答

==

忘了……竟然成了一個史前巨坑……現在回來答了。。。

首先第一點就是:怪諾基亞,用了垃圾RAM。

如果你同時使用過一代機和二代機,就會有一種明顯的感覺:在二代機上,「正在恢復」的頻率和時長都比一代機要低很多。我和朋友們對比了大量機型和數據,包括920、1020、63X、海信娜娜、1520,可以肯定的是CPU性能、ROMNAND性能、GPU性能都不是最影響「正在恢復」現象的參數。

問題出在RAM上。

在一代機中(即除了1520外的所有xx20,以及大部分x25機型),由於不知道什麼原因,諾基亞選擇了很低端的RAM晶元。

Ram這個東西不能只看其容量大小參數。速度是很重要的指標。在Lumia 1020及其之前的機型上,RAM的速度是極其低下的,整體比二代機型差了一大截。甚至還不如海信娜娜……

在二代機上出現的正在恢復,和其他系統的恢復場景其實沒什麼不同,都不會怎麼影響用戶體驗。所以解決辦法就是:買新機,坐等買三代機……

第二點是,WP的恢復機制略有不同。前面的同學已經說過了,我就不多講了。


感覺IOS較長的切換動畫就是用來掩蓋響應時間的。一如WP的瓷貼翻轉動畫被人調侃為用來掩蓋程序的響應時間。

但是如同上面的回答,iPhone定製的硬體可能會帶來更好的處理效果。我對此沒有過研究,猜測。

我曾經在IPhone設備上更換過程序切換動畫,極短的切換動畫會導致程序雖然已經切換,但是停留在無響應的狀態。所以有這樣的猜測。個人體驗,輕噴。

來自WP強勁的IE10瀏覽器


這不是很明顯的WP8的應用很占內存么?你先後開啟幾個應用之後,前面的應用就被清理出內存了。iOS的機制也是一樣的,不過iOS的應用內存佔用小。所以同樣是512內存大小,iOS所能運行的應用數量要多一些。你要是在iOS上運行幾個大型遊戲,切換的時候一樣會花費時間重新載入。


系統和應用的內存佔用都會有吧. WP8是開了導航後, 之前的應用經常被清理, 切回會有重啟, 但已經比WP7.8好太多了. IOS的問題一樣, 我的Touch5(算最新一代了), 用IOS6時候基本可以保存3個以上應用, 更新了IOS7以後, 開一個微信一個大點的小說, 切換時都經常要重新載入等待好久. 更別提遊戲了, 基本不能雙應用共存內存中.


我覺得把CLR和Native本身就有差距。


推薦閱讀:

為什麼沒有公司把手機做成模塊化的,就像PC一樣?
如何評價董明珠近日怒摔手機問「你敢嗎」事件?
如何評價 iPhone 6s 用的是 NVMe 快閃記憶體?相比 UFS 2.0 如何?
怎麼看待華為使用的emmc快閃記憶體隨機讀寫速度大幅超越ufs?
為什麼手機越用越慢?

TAG:iOS | 手機 | 內存管理 | WindowsPhone8 |