Windows Phone 8开发入门(六)

2024-06-12 21:08
文章标签 windows 入门 开发 phone

本文主要是介绍Windows Phone 8开发入门(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



主要内容:后台代理

后退堆栈

操作返回堆栈

Private void PurgeBackStackButton_Click(object sender,RoutedEventArgs e)

{

WhileNavigationService.CanGoBack)

NavigationService.RemoveBackEntry();

}

RemoveBackEntry方法用于从后退堆栈中移除最近的条目,如果没有要移除的条目,则引发InvalidOperationException.如果您想移除多个项目,则多次调用此方法。此API是同步的,因此必须从UI线程调用。

使用后退堆栈

使用新页面替换当前页面

删除所有页面

清除整个页面后退堆栈并替换为给定页面。

 

前台任务

一般Windows phone应用程序是运行在“前台”

任何时间只能有一个应用运允许运行在前台

目的是保证最佳的用户体验和延长手机电量使用时长

 

后台代理

后台代理

Windows Phone应用程序可启动一个后台代理为其服务

可以定期代理或者资源密集型代理

每一个应用程序只允许使用一个代理

后台代理都允许应用程序在后台执行代码,即使当应用程序未在前台运行时也是如此

不同类型的计划任务是针对不同类型的后台处理方案设计的,具有不同的行为和限制

后台代理使用警告

Windows Phone操作系统限制了同时激活的代理的数量

除非在适当的条件下调用,否则代理可能不会启用

后台代理只在操作系统认为资源足够时,方可运行

如果手机处于节电模式状态下,那么所有的后台代理将被终止

用户可以管理其手机上的每个应用的后台代理,选择启用或者禁用

代理和任务

不同类型的计划任务是针对不同类型的后台处理方案设计的,因此具有不同的行为和限制

两种类型的任务

Priodic tasks定期代理

Resource intensive tasks资源密集型代理

代理的代码由应用程序在从BackgroundAgent继承的类中实现。代理启动时,操作系统调用OnInvoke(ScheduledTask).在该方法中,应用程序可以确定它以哪种ScheduleTask类型运行,并执行相应的操作。

定期代理(PeriodicTask Agents)

定期代理通常每隔30分钟运行一次。若要优化电池使用时间,定期代理的运行可以与其他后台进程一致,因此执行时间可能最多漂移10分钟

定期代理通常运行25秒。其他限制可能会导致嗲了提取终止。

节电模式是一个选项,用户可以在设备上启用该选项以指示应该优先考虑电池使用时间。如果启用此模式,则定期代理可能不运行,即使间隔已过也是如此。

为了帮助最大程度地提高设备的电池使用时间,对手机上可以计划的定期代理数量进行了硬性限制。它因每个设备配置而异并且可以低到6.还有另一个低于硬性限制的限制,超过该限制之后会警告用户他们正在运行多个后台代理,因此电池消耗可能比较快。

资源密集型代理(ResourceIntensive Agents)

资源密集型代理通常运行10分钟。其他限制可能会导致代理提取终止。

除非设备连接到外部电源,否则不运行资源密集型代理。

除非设备通过Wi-FiPC连接建立网络连接,否则资源密集型代理不运行。

除非设备的电池电量高于90%,否则资源密集型代理不运行

除非设备屏幕锁定,否则资源密集型代理不运行

当手机呼叫处于活动状态时,资源密集型代理不运行

不能将网络更改为手机网络,即如果资源密集型代理尝试调用指定MobileBroadbandGSM()MobileBroadbandCDMA()AssociateToNetworkInterface(Socket,NetworkInterfaceinfo),则该方法调用失败。

后台代理功能

允许

Tiles

Toast

Location

Network

R/W ISO store

Sockets

限制

Display UI

XNA libraries

Microphone and camera

Sensors

Play audio(may only use background audio APIs)

在后台运行Windows Phone 8的位置跟踪

Windows Phone 8上,在用户导航离开之后,只要位置跟踪应用持续活跃地跟踪位置,它就可以持续在后台运行

此功能支持诸如提供逐向导航的应用这样的方案

对于在移动设备上运行的应用,耗电量是一个重要注意事项。在后台运行应用时,您可以采取一些步骤降低电池消耗,进而提高用户对应用的满意度

创建后台代理

Add new project-->Windows Phone -->Windows PhoneSecheduled Task Agent-->创建LocationLogTaskAgent工程

Captions Log Solution

解决方案中包含两个工程

LocationLogger:Windows Phone工程---启动程序所在的工程

LocationLogTaskAgent:位置跟踪的后台代理工程

解决方案中可包含多个不同类型的工程

连接后台代码的工程

CaptainLog工程引用了后台代理LocationTaskAgent工程

前台的应用不会直接在代码中引用dialing的类

然而,我们必须明确的连接两个应用,为此在CaptainsLog工程引用LocationTaskAgent的输出

后台代理代码

Namespace LocationLogTaskAgent

{

Public class ScheduledAgent:ScheduledTaskAgent

{

Protected override void OnInvoke(ScheduledTask task)

{

NotifyComplete();

}

}

}

我们必须在OnInvoke方法中实现代理功能

当其完成时通知系统

后台代理的数据分享

Protected override void OnInvoke(ScheduledTask task)

{

String message="";

String logString="";

If(LoadLogFromIsolatedStorageFile()

{

Message="Loaded";

}

Else{

Message="Initialised";

}

……

}

第一件事情代理完成的就是从独立存储空间加载日志字符串

在日志的末尾加上当前的位置信息

数据访问

Public bool LoadLogFromIsolatedStorageFile()

{

Mut.WaitOne();//wait until it is safe to enter

Try{

//read the file here

Return true;

}

Catch{

LogText="";

Return false;

}

Finally{

Mut.ReleaseMutex();//release the Mutex.

}

通过互斥保护访问独立存储空间的文件

访问结束后释放互斥

显示通知

Protected override void OnInvoke(ScheduledTask task)

{

……

ShellToast toast =new ShellToast();

Toast.Title="Location Log";

Toast.Content=message;

Toast.Show();

……

}

后台任务可以发送Toast通知的消息

如果用户轻触通知消息,则则会启动前台的应用

Toast通知消息在前台主应用启动时不会显示

计划任务

PeriodicTask  t;

t=SecheduledActionService.Find(taskName) as PeroidicTask;

Bool fond=(t!=null);

If(!found)

{

t=new PeriodicTask(taskName);

}

t.Description=description;

t.ExpirationTime=DataTime.Now.AddDays(10);

If(!found)

{

ScheduledActionService.Add(t);

}

Else

{

ScheduledActionService.Remove(taskName);

ScheduledActionService.Add(t);

}

调试后台任务

#if DEBUG_AGENT

ScheduledActionService.LaunchForTest(taskName,TimeSpan.FromSeconds(60);

#endif

如果调试代码时,我们需要等待30分钟看后台代理的执行结果,那么将是非常令人懊恼的

如果我们正在调试代码,可以强制启动代理服务

这样的代码可以在Release编译时被有条件的排除

后台代理最佳做法

最小化网络请求的次数和频率

停止活动的TimerDispatcherTimer对象,如果它们仅用于前台功能(如UI )

停止所有XAML动画

如果应用程序不再需要在后台运行,通过移除Geolocator类的PositionChangedStatusChanged事件的事件处理程序或通过调用GeoCoordinateWatcher类的Stop()方法停止跟踪位置

后台文件传输

可创建后台文件传输的任务从独立存储空间传送文件

即使应用没有运行,传输仍旧可以运行

应用程序可监视下载状态,并显示其进度

后台传输服务仅支持使用HTTPHTTPS的传输,不支持FTP

应用程序管理传输任务的队列

应用可查询激活的传输状态

后台传输用户界面最佳做法

后台文件传输应该有用户启动,如通过点击某个按钮

您必须提供允许用户查看所有后台传输的状态和传输进度的UI

必须提供用户取消任何以及所有当前传输的机制

使用将文件传输限制为仅通过Wi-Fi以及在连有外部电源时进行的默认传输首选项。可以使用TransferPreferences属性设置用户的选择

如果后台传输的状态为WaitingForExternalPower,WatingForExternalPowerDueToBatterySaverMode,WatingForWiFiWatingForNonVoiceBlockingNetWork,则向用户提供一个消息,通知他们传输正在等待的原因(恢复传输的步骤)

后台传输应遵循的建议

在关联的传输操作完成之前,不要尝试访问或修改“/shared/transfers”目录中的目标文件

BackgroundTransferRequest对象的Tag属性可用于将关联的自定义数据与某个传输关联

访问Requests属性时,会创建BackgroundTransferRequest的新实例。建议

为防止内存泄露,建议您避免经常(如在某个游戏循环中)访问此属性来查询请求数量

只要不再使用返回的对象,就迅速处置它们。相同的建议也适用于Find(String)方法,该方法在找到提供的传输ID时将创建新的实例

TransferStatusChangedTransferProgressChanged事件的事件处理程序应该快速返回以便用户界面不会变得行动迟缓。从独立存储中读取以及向独立存储中写入的速度可能很慢,如果有可能的话,应该在单独的工作线程上执行

TotalBytesToReceive属性指示文件下载的总大小。如果该值为-1,则表示文件大小未知。

服务器应该在HTTP响应标头中返回内容长度,以便让用户知道传输的大小和进度

服务器必须支持来着客户端的Range请求以改进性能。后台传输有可能会在进行时暂停和恢复。不支持Range请求将导致性能降低,因为传输一旦暂停,必须重新启动

建议您在浏览器中或者通过后台传输应用程序外部的某一个其他机制测试服务器端功能以确保正常工作

这篇关于Windows Phone 8开发入门(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055341

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3