Android开发者如何进行Windows Phone开发

来源:转载

和Android平台移动应用程序非常类似,Windows Phone 7(WP7)应用程序也是用托管语言编写的,Android使用Java,Windows Phone 7使用C#,各自都提供了丰富的开发库,Java和C#之间的许多差异都与样式有关,它们都和C/C++有着千丝万缕的联系,因此它俩也有很多相似之处。

.NET/Windows Phone 7和Java/Android Api之间虽有很多不同点,但两者的相似点让你在移植应用程序时不需要费太大的力气。

平台差异

在深入了解转换或创建Windows Phone 7应用程序相关的工具和过程之前,我们先简单介绍一下Windows Phone 7和Android各自使用的术语和技术。Windows Phone 7第一个重大的不同点是,应用程序是用C#编写的托管.NET程序集,平台支持两种类型的应用程序:Silverlight和XNA游戏。

大多数Windows Phone 7应用程序都是用Silverlight创建的,通过常见的控件,如标签、文本框和列表等,提供典型的基于表单的用户交互,Android Layout和Activity与Silverlight中的Page类似。

Windows Phone 7还支持XNA,它允许用户创建2D和3D游戏,它们分别等同于Android SurfaceView和GLSurfaceView的2D和3D模式,但和Android不同的是,XNA游戏使用的是Direct3D,因此更容易将PC和Xbox 360游戏移植到手机上,而Android使用的是OpenGL。

页面(Page)和导航(Navigation)

Silverlight Page实际上是一个XML文件,它和Android Layout类似,XML定义一个Page时是使用XAML(可扩展应用程序标记语言)创建的,XAML和Android Layout类似,但它支持更多的功能,XAML允许开发人员在Page内执行操作,包括Animations和Data Binding等,从此不再需要为这些功能编写代码。

Android Layout和Activity是松耦合的,你需要自己编写代码,以便和Activity内的UI元素连接起来,对给定的Page来说,C#代码是和它捆绑到一起的,因此不需要编写UI附属元素,平台会自动为对象创建相关的“线路”,为Page和UI创建相关的事件,这样可以预防在Task onCreate方法中经常出现的混乱。

这两个平台另一个重要的不同之处是导航,在Android中,你可以通过创建一个Intent从一个任务切换到另一个任务,它和Windows Phone 7中的Navigation功能相同,Navigation允许你在Page之间移动,和Android Intent类似,你可以向你要导航的Page传递数据,Windows Phone 7中的Page和ASP.NET中的Page有某些属性是相似的。

将Layout转换成Page

在深入了解代码之前,我们先来看看Android Layout XML如何向Windows Phone 7 XAML Page转换,在Windows Phone 7免费工具箱中,最耀眼的莫过于XAML设计工具,Visual Studio® 2010中的XAML设计器只适合初级开发人员,它只能对Page做一些基本的控制,Expression Blend®则是专业化的工具,需要改造UI时,你应该使用它,和Android Layout一样,你也可以使用文本编辑器直接编辑XAML文件,因为实际上它是一个XML文件。

Windows Phone 7 Page提供了Android Layout类似的布局能力,下表列出了它支持的布局属性和Android对应的属性。

布局控件

Windows Phone 7Android Canvas AbsoluteLayout Grid GridView ScrollView ScrollView StackPanel LinearLayout

正如你所看到的,Windows Phone 7提供了和Android几乎相同的布局能力,下表列出了Windows Phone 7的基本控件和Android的同等控件。

基本控件

Windows Phone 7Android TextBlock TextView TextBox EditText Button Button CheckBox CheckBox RadioButton RadioButton Image ImageView ProgressBar ProgressBar ListBox ListView Map MapView WebBrowser WebView

你应该注意到Windows Phone 7的基本控件和Layout类型能够一一对应,但也有些特殊的Layout和控件无法对应起来,其原因在于XAML的强大,通过XAML,我们可以在一个控件中嵌入另一个控件,这意味着你不用创建复杂的控件,这一切都可以在你的应用程序中创建和自定义。

应用程序存储

对大多数移动应用程序而言,数据的存储是一件大事,对Windows Phone 7来说,最佳的办法是选择云服务作为数据存储的主要手段,你可能会感到很奇怪,但如果你是为你的网站开发一个前端程序,你就会明白了。如果你不是做的这种开发,你有两种数据存储方法:使用商业云存储服务,如Windows Azure云存储,或使用本地IsolatedStorage接口,IsolatedStorage允许你为应用程序存储文件。

Windows Phone 7应用程序允许你访问本地数据,但它目前并没有提供内置的数据库API,如SQLServer精简版或SQLite,如果你现在的Android应用程序使用的是SQLite存储数据,你需要提出一个替代方案,在写这篇文章的时候,在Codeplex上有几个开源项目为IsolatedStorage接口增加了数据库存储功能。

根据你应用程序的数据存储需要,不需要数据库API,也许就能将数据存储在本地,例如,如果你在构建一个RSS/ Podcast应用程序,你可以把RSS种子就保存在XML文件中,当你需要访问数据时,你只需要载入数据,使用LINQ获取特定的数据即可。

在RSS应用程序示例中,我们可以使用RSS种子的原始XML文件,也可以使用LINQ to XML创建XDocument存储下面这样的记录:

//Create XML

XDocument doc = new XDocument();

   doc.Add(new XElement("DataRoot",      new XElement("Record",
         new XElement("value","data1")),
      new XElement("Record",
         new XElement("value","data2"))
      ));

这段代码创建的XML结构如下:

<DataRoot>
   <Record>
      <value>data1value>
   Record>
   <Record>
      <value>data2value>
   Record>
DataRoot>

为了将这个XML隔离存储,我们使用IsolatedStorageFile和IsolatedStorageFileStream,如:


//Save the XML
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
   {
      doc.Save(file);

      file.Close();
   }
}

正如你所看到的,隔离存储XML数据是如此的简单,读取XML和使用LINQ to XML查询结果的的代码如下:


//Load the XML
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
   {
      XDocument d = XDocument.Load(file);

      var query = from r in d.Root.Elements("Record")
                        select r;


      //Process the list of record

   }
}

虽然上面的例子非常简单,它也说明了即使没有数据库,在手机上存储数据是多么容易,这些代码还可以进一步扩展,存储更复杂的数据。

Windows Phone 7支持存储应用程序设置和用户偏好设置,在Android中,它叫做Shared Preferences,支持存储Key/Value类型的信息,在Windows Phone 7中,它叫做Local Settings,通过IsolatedStorage接口可以访问它们,同样,信息访问也是通过Key/Value的格式进行的。

开发工具

作为一名Android开发人员,你可能对开源开发工具情有独钟,使用Eclipse作为Android应用程序开发IDE无疑是大多数人的选择,但Android Development Toolkit(ADT)缺乏许多必要的工具,如适合的布局工具,虽然ADT带有布局工具,但不够强大,很多时候,我们不得不手写XML。

相比之下,微软平台可供选择的工具就要多得多,现在在create.msdn.com上提供的工具有:

◆Microsoft Visual Studio 2010 Express for Phone

◆Microsoft Expression Blend for Phone

◆Microsoft XNA Game Studio for Phone

这三个工具允许你免费使用,Microsoft Visual Studio 2010 Express for Phone是主要的Windows Phone 7应用程序集成开发环境,它包括了所有必需的工具,如Page布局工具,C#编译器,Windows Phone 7模拟器等。

Microsoft Expression Blend for Phone主要是针对专业设计人员的,设计人员可以使用它从零开始创建Page。

Microsoft XNA Game Studio for Phone则是为2D和3D游戏开发准备的,它包括了XNA框架,以及处理游戏音效和图像需要的工具。

小结

Windows Phone 7给智能手机操作系统市场注入了新的活力,它基于成熟的技术,如Silverlight,WPF,C#等,正如本文介绍的,Android和Windows Phone 7之间的差异主要集中在表面上,Android开发人员要转向Windows Phone 7开发并不是什么难事。

移动App 题外话

前段日子诺基亚与微软结盟,未来诺基亚的主推智能手机平台将为Windows Phone平台,对诺基亚和微软来讲都将是一个双赢的局面,而对Windows Phone平台的开发者来讲有诺基亚这样的手机厂商支持,开发Windows Phone应用将更加“钱途”。到目前为止,Android平台比Windows Phone平台的开发者要多得多,希望本文能够给Android开发者一个启迪。


分享给朋友:
您可能感兴趣的文章:
随机阅读: