軟件生命周期如何劃分,WP7開發第一課:軟件生命周期(其二)

 2023-10-20 阅读 29 评论 0

摘要:接下來講解下:閑置偵測什么是系統閑置偵測呢?WP7系統在一段時間沒有操作后,為節省電源,屏幕會變暗,而再經一段時間后,便會鎖定設備,將屏幕整個關閉。進入了生命周期中的 Deactivated 事件。但如果我們應用播放音樂呢?這樣肯
  • 接下來講解下:閑置偵測
  • 什么是系統閑置偵測呢?WP7系統在一段時間沒有操作后,為節省電源,屏幕會變暗,而再經一段時間后,便會鎖定設備,將屏幕整個關閉。進入了生命周期中的 Deactivated 事件。但如果我們應用播放音樂呢?這樣肯定是不行的,于是出現了“系統閑置偵測”,要設定 Idle detection 。
  • WP7 中,Idle detection 有兩種,一種是應用級別的,一股是用戶級別的:
    • ApplicationIdleDetectinMode
    • UserIdleDetectionMode

ApplicationIdleDetection 是應用程序閑置狀態偵測,例如經過一段時間沒有使用的話,設備會進入鎖定,并且引發應用程序的 Deactivated 事件,隨后應用程序進入 tombstoning 墓碑狀態(墓碑是記錄死亡信息的);ApplicationIdleDetectionMode 便是設定設備進入鎖定時,應用程序會不會進入 tombstoning 墓碑狀態,如果設定為關閉,那么將不會引發應用程序的 Deacticated 事件,也不會將應用程序進入 tombstoning 墓碑狀態 ;好處有:

  • 應用程序仍然在執行中
  • 當用戶返回應用程序時,由于沒有進入 tombstoning 墓碑狀態,能夠快速回復

而要注意的:

  • 應用程序仍然在執行,所以會繼續的消耗電池的電力;請特別注意,設備同樣會進入鎖定狀態,只是應用程序不會停止
  • 所有有關 UI 的更新動作應該要停止,以節省電力的消耗
  • 所有動畫、Timer 等動作應該要停止
  • Sensor 將會停止回報(例如 accelerometer 將會停止回報目前的數值)
  • 在改變閑置偵測模式時,永遠要先詢問使用者是否同意

tombstoning 墓碑機制主要用于在后臺運行程序,畢竟WP7尚未支持多任務處理,可以用此機制模擬多任務。墓碑機制感覺跟耶穌死亡,三天后再度復活差不多。

獲取目前 ApplicationIdleDetectionMode 的狀態,以及判斷目前設備是不是被鎖定。

軟件生命周期如何劃分。由上圖可知由外向內為:PhoneApplicationFrame-->時間、信號狀態欄、Application bar?、?Page-->Content

?Obscured、UnObscured 事件,這兩個事件便是發生在 PhoneApplicationFrmae 中:

Obscured事件便是當進入鎖定時會引發的事件,在這個事件中,可以去做將 Storyboard、UI 的更新動作停止的相關動作。

using Microsoft.Phone.Shell;
Pprivate void SetAppIdleDetectionDisable(){//將應用程式閒置狀態偵測關閉PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDeectitonMode.Disabled;PhoneApplicationFrame root = (App.Current.RootVisual) as PhoneApplicationFrame;if (root != null){root.Obscured += new EventHandler<ObscuredEventArgs>(root_Obscured);root.Unobscured += new EventHandler(root_Unobscured);}elseMessageBox.Show("Error");}

把閑置狀態偵測關閉之后,接著就是取得 PhoneApplicationFrame ,而 PhoneApplicationFrame 時也是透過 App 類別來取得,取得之后由于在相關的事件必須要有對應的處理動作,因此必須要掛載相關的事件;其中 Obscured 事件便是當進入鎖定時會引發的事件,在這個事件中,可以去做將 Storyboard、UI 的更新動作停止的相關動作,例如下面這邊以一個 Timer 為例子,在這個事件中會進行關閉的動作

void root_Obscured(object sender, ObscuredEventArgs e){Debug.WriteLine("Unobscured");if (e.IsLocked){//當應用程式被Lock screen覆蓋時要處理的動作,停止動畫(storyboard)、UI更新等動作timer.Stop();}}

軟件的生命周期是指、在設備進入鎖定時,能夠把一些不需要用到的部分關閉,以節省電源。

看完了關閉之后,那如果要重新把閑置狀態偵測給開啟呢?設定回 Enable 就可以了?這個動作沒有錯,但是目前的 Windows Phone 7 版本尚未支持,目前閑置模式關閉之后,要重啟的唯一方式就是整個應用程序必須要重新開啟才行,這部分要特別留意。而 MSDN 中有提到,建議還是可以在應用程序中加入相關的程序代碼,但同時要做錯誤處理,例如說

private void SetAppIdleDetectionEnable(){if (PhoneApplicationService.Current.ApplicationIdleDetectionMode != IdleDetectionMode.Enabled){try{PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Enabled;}catch (InvalidOperationException ex){//platform not souportedMessageBox.Show("Can't enable application idledection");}}}

這樣在未來的更新中,系統支持上來之后,你的應用程序功能就可以立刻的正常運作了。

?UserIdleDetectionMode 部分:

這個部分是偵測使用者閑置的狀態,使用的方式跟剛剛 ApplicationIdleDetection 是極其類似的,主要的差異性如下:

  • 以目前來說,使用者閑置是指『當用戶沒有觸碰屏幕操作,或是點選硬件按鍵時』,Sensor 的部分目前即使有改變(例如說轉向等等),也是視為閑置中,這個部分在未來的更新中可能會有變更
  • 當設定為 Disable 時,裝置永遠不會進入鎖定
  • UserIdleDetectionMode 是支持 Disable 以及 Enable 的

關閉:

private void SetUserIdleDetectionDisable(){PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;}

在軟件生命周期中、重啟:

private void SetUserIdleDetectionEnable(){if (PhoneApplicationService.Current.UserIdleDetectionMode != IdleDetectionMode.Enabled){try{PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Enabled;}catch (Exception ex){//platform not souportedMessageBox.Show("Can't enable user idledection");}}}

這樣便可以達到停止閑置狀態的偵測,這對于一些單純利用 Sensor 來進行操作的應用程序是相當有用的。

來自:http://www.cnblogs.com/zhangdongzi/archive/2011/08/24/2152595.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/151748.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息