What WP7 improvements mean for developers

DZone 's Guide to

What WP7 improvements mean for developers

· ·
Free Resource

The Windows Phone 7 SDK (and the platform itself) was lacking some important features from the very beginning. It started with a pretty basic set of capabilities, but access to various shell capabilities was (and still is) pretty limited. With the Mango update, many problems will be solved and the progress that has been made shows that Microsoft actually listens to its consumers - pretty much everything people were asking for will be shipped as a part of the next update.

First and foremost, there will be support for multitasking and background processes. With the current execution model it is impossible to develop applications that will perform some operations in the background while other apps are running as the primary unit. This excluded the possibility of such apps as Pandora to appear on the Marketplace the moment Windows Phone 7 was shipped. Now it is corrected and such apps as Last.fm, Slacker Radio (and even HTML5 audio sites) will be able to perform content playback (music) in the background. Other processes will also be able to be executed in the background, with some limits for memory usage. One important update was the fact that when an application starts to consume more memory than it is supposed to, the process will be killed but the state will be preserved.

Background operations aren't the limit - now there are agents. Those are basically sandboxed services that can run when the application itself is not running. I can see a multitude of uses for agents, and a lot of those were already demo-ed during the conference. For example, to pull data from web services to update application tiles. There are specific limitations on the agent activity - those cannot perform any activity for more than 15 seconds due to performance considerations. Detailed specifications and requirements will be released with the final release of the SDK.

Major improvements come to the Silverlight stack. Text input has improved dramatically, with support for more languages and spell check. Now if there is a problem with a specific word, it will be highlighted as it is in Microsoft Word - with a red squiggly. A RichTextBox is also available (even though it is set to read-only) - basically a TextBlock with rich content capabilities. In addition to that, with the upcoming Mango update developers will have access to the Clipboard API.

The emulator itself went through a toolset overhaul. There will no longer be a problem with passing mocked GPS or accelerometer data due to the fact that mocking tools are bundled with the SDK.

There is now support for sockets: TCP, UDP Unicast and UDP Multicast are all usable with Mango. This opens the doors for multiple new applications, like IRC clients or IM clients like Skype. What's surprising is that a lot of plumbing is once again done for developers, so there is no low level work required to take advantage of sockets.

Support for WebCam API was also introduced. That will ultimately allow the creation of applications that will be able to stream video content online - this was not possible in the current release because of the restrictions on the Camera API. Another improvement in the "graphics & media" field is support for 32 bits per pixel - this will improve the display capabilities for more colors and the gradients will be more "smooth". Silverlight 4 on Windows Phone also introduces VideoBrush, that was already present for quite a while on the web version of Silverlight.

Camera APIs are finally open - there will no longer be a need to use reflection or GAC-based libraries in order to insert a custom viewfinder in the application UI.

Overall, there are more than 1500 new APIs that will be available at the end of May, when the new SDK will be released. I cannot show any code snippets at the moment because of the unavailability of the developer bits.


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}