ApplicationIdleDetection 是應用程序閑置狀態偵測,例如經過一段時間沒有使用的話,設備會進入鎖定,并且引發應用程序的 Deactivated 事件,隨后應用程序進入 tombstoning 墓碑狀態(墓碑是記錄死亡信息的);ApplicationIdleDetectionMode 便是設定設備進入鎖定時,應用程序會不會進入 tombstoning 墓碑狀態,如果設定為關閉,那么將不會引發應用程序的 Deacticated 事件,也不會將應用程序進入 tombstoning 墓碑狀態 ;好處有:
而要注意的:
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 是極其類似的,主要的差異性如下:
關閉:
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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态