×
Namespaces

Variants
Actions

Belle系统新特性

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
Amazing110 在 15 Feb 2012 创建
最后由 hamishwillee 在 19 Jul 2012 编辑

本文描述了Nokia Belle所引入的一系列的新的特性,他们会在一定程度上影响第三方软件。本文的目的是支持第三方开发者在新的Belle平台上测试他们的应用是否能正常工作。

Contents

Introduction

和其他新的系统发布一样,Nokia Belle引入的新功能和重大的UI改变,都需要众多的API的改变,在某些情况下,这些改变会导致以前的应用兼容性的破坏,在接下来即将发布的PR 1.1版本中,我们将修复一些影响兼容性的bug。

Belle系统新特性介绍

Avkon UI 改变

1. 背景 Belle系统对屏幕布局做出了较大改变,在竖屏时,状态面板和控制面板的尺寸的改变导致程序主面板区域的变大,toolbar被融合到了control pane ...软键变成了图标,当然我们也可以自定义软件图标的显示。

2. 对程序的影响 由于以上的一些UI尺寸的改变,对于S60第五版或者更早版本的程序在Belle上运行时,就可能不能全屏,或者说不能充满最大的可用的屏幕区域。更为严重的是,假如程序在布局时,使用硬编码还有可能程序的崩溃。对于软键会动态改变的程序,这一功能在Belle上同样可能不再能正常工作,将会被显示为“...”。

3. 解决方案 以前的程序必须在Belle设备上进行测试。移植到Belle的指导原则,请参见这里。在Belle上开发应用,一般建议使用Qt Quick组件,因为它提供了与Belle系统UI本身更协调的外观。

新的内存分配机制实现

1. 背景 以前的堆分配使用的是first-fit算法,这种算法将空闲的内存块链接起来,形成一个list,当有内存分配请求时,遍历该list指导找到大于所请求大小的空闲区域。当释放内存时,连续的空闲区域将会被合并起来。新的内存分配具有更好的性能表现 ,它综合使用3种分配算法,分别是Doug Lea allocator, Slab allocator and paged allocator。

2. 对程序的影响 对于内部已经有了很大变化的公开API和许多使用了非公开接口的应用,解决方法是二进制兼容的处理,比如,RHeap类被设计成为了一个基类,已经不能被实例化,具体的改变如下:

  • public的内联函数已经被转移到了RAllocator或者删除。
  • 我们一般使用RAllocator,而不是RHeap,否则有可能引起崩溃。
  • RHeap::__DbgGetAllocFail()和 User::__DbgGetAllocFail() 函数允许访问那个变量。
  • 由于堆分配机制实现的改变,枚举量 ECellAlignment, EFreeCellSize 和EAllocCellSize值也同样改变了。

新的内存分配机制会消耗更多内存用于存放内部的元数据,当处于临界值时,这会变得异常明显。

3. 解决方案 程序运行的相关代码同样做出了修改,初始化堆的最大值(mmp文件中定义的)的自动增加到了1M,以便提供增多的内存消耗。

手机配置相关API的改变

1. 背景 为了是“设置”模块对于用户来说更加友好,同时减少选项的数量,Outdoor和Pager两项已经被删除,包括UI和相关代码。

2. 对程序的影响 对于期望使用这两项数据,以及期望通过MProEngEngine()接口对它们进行的功能将不能成功。

3. 解决方案 没有解决方案,程序必须避免对他们进行读取以及设置。

打印相关API被废除

1. 背景 打印相关的库被放在了(sf\os\graphics\printingservices),然而这个框架已经不在任何设备被使用了,现在相关的API已经不在推荐被使用,并且在将来的release版本中将会被删除。需要注意的是,图形设备(Graphics Device)接口目前仍然是 可以使用的,用来提供对打印设备驱动的支持。打印被当做想图形上下文进行描画,而打印机被当做一个图形设备了。PrintingSupport模块(sf\mw\appsupport\printingsupport) 提供了打印服务的框架,它支持打印预览。支持USB,蓝牙,UPNP等的传输。打印程序能够被任何程序启动。

2. 对程序的影响 一些程序可能因为上面的改变而受影响,相关更改的官方通知,请参见

PrintService模块

3. 解决方案 暂时无。

屏保相关API的改变

1. 背景 在某些情况,比如说锁屏状态时,我们想要进行紧急呼叫,由于这个新的需求的引入,在ScreenSaver应用中,我们新增了该功能。

2. 对程序的影响 目前所有的屏保插件都要求具备NetworkControl这个能力,以便能够被加载。这就可能影响以前发布的屏保插件。但是由于这个能力是属于被限制的一列,所以开发者不能够简单的把它添加到工程。

3. 解决方案 该bug的修复目前已经提上日程,修复方案将在Belle PR 1.1中发布。目前紧急呼叫被移到了"Big Screen".

远程存储相关API被移除

1. 背景 远程存储的相关API提供对远程存储设备的加载以及卸载功能,同时提供活动存储信息的查询,连接属性查询,服务器名称查询,连接状态查询,等功能。

2. 对程序的影响 在向公众开发者提供的版本中,已经没有相关API的文档。如果程序仍然使用它们,那么将会受到影响。

3. 解决方案 开发者必须移除依赖于此API的功能。

工具栏API的改变导致重画

1. 背景 Avkon UI改变导致的副作用。

2. 对程序的影响 由于尺寸以及位置的改变,在某些情况,在新的Belle的toolbar区域,程序的toolbar可能不会被描画,直到由于程序内部事件而引起的软键重画事件。

3. 解决方案 有望在 Nokia Belle PR 1.1中修复。

WSERV 86 崩溃问题

1. 背景 这是一个由于在CWsWindowBase::CommandL() 和EWsWinOpEnableAdvancedPointers中行为的改变,它是由于当窗口已经被激活后,窗口服务器,客户端相关库仍然试图打开高级触摸事件。

2. 对程序的影响 程序试图使用多点触摸时,有可能会引发次问题。

3. 解决方案 有望在 Nokia Belle PR 1.1中修复。

电话薄获取UI 崩溃问题

1. 背景

2. 对程序的影响 联系人选择对话框不能够被启动运行。

3. 解决方案 有望在 Nokia Belle PR 1.1中修复。

弃用SIP提供的API

1. 背景 SIPProviders API提供了使用通信框架的高层的API,但是在S60中IPAppServices API提供更加完全的实现,因此目前SIPProviders 目前已经不推荐被使用了, 在将来的版本中将会被删除。

2. 对程序的影响 对于以前SIPProviders API的程序,应该修改,尽量使用IPAppServices 实现相关功能。

3. 解决方案 使用IPAppServices替代SIPProviders 。

连接相关设置API的改变

1. 背景 ECmCellularDataUsageConfirm 和 iUsageOfWlan 已经从结构体TCmGenConnSettings中删除,TCmGenConnSettings被=定义在cmgenconnsettings.h中,在cmmanager.h的RCmManager::ReadGenConnSettingsL() 和=RCmManager::WriteGenConnSettingsL()中用到了该结构体。 下面的这些枚举值,都已经不在被支持: • ECmCellularDataUsageConfirm value in TCmCellularDataUsage • iUsageOfWlan field in TCmGenConnSettings • TCmUsageOfWlan enum 这些改变是由于新的移动电话数据以及Wlan无线电波开发触发器的使用,使得这些连接设置必须做出相应的改变。出于向=后兼容的考虑,这些值都仍然被保留,但是开发者不应该再使用它们了。

2. 对程序的影响 开发者应该检查使用了ReadGenConnSettingsL() 的代码,ECmCellularDataUsageConfirm 也不再由CMManager返回,因=此相关的代码应该被删除了。iUsageOfWlan 同样不能再ipconnmgmt 包外部使用了。WriteGenConnSettingsL()函数同样不能再包ipconnmgt 外部使用了。这些改变将可能导致一些功能失效。

3. 解决方案 程序代码必须做出适当的更改,以便提供相应的功能。

Qt 4.7.4 中的变化

Nokia Belle提供了Qt4.7.4开发包(包括Qt,Webkit,QtQuick1.1,Qt Mobility 1.2 和 Qt Quick Components 1.1),使用Qt4.7.4的组件开发应用要注意如下所述的一些变化。

Qt Mobility的 QML bindings的改变

1. 背景 随着QtMobility1.1.3发布的QML bindings不会是最终的版本,它们实际上已经标记为实验,在QtMobility1.2中这些bindings已经加入了,为了修改一些bug和使用重复实现 的QML Maps,开发者应该导入1.2版本。一些信号已经从QML DeviceInfo, QML NetworkInfo, QML DocumentGalleryModel 中移除,Battery Level属性也已经从QSystemInfo 中移除,更多详情参考:[1]

2. 对程序的影响 QML Map部分的变化可能会是影响更多的一部分,不过希望这些影响并不是很严重,其余部分的变化影响不那么大,可能仅会影响一些特殊的应用,但是比如应用停止工作这种影响却是严重的。

3. 解决方案 这是一个计划中的变化,QTMobility1.2.1和1.2.0比较起来已经努力使变化的影响不大,不过也没有更多的精力放在这个上面。受影响的应用程序必须进行修改,移除那些已经不存在的构件

严格进行QML导入版本控制

1. 背景 导入的版本必须正确。忽略之前的一个高版本号,而使用最新可用的版本。例如:在Qt 4.7.3: “import QtMultimediaKit 1.2” 是被接受的, 但是4.7.4中使用的是最近的版本(1.1) “import QtMultimediaKit 1.2” 就会产生错误: “module “QtMultimediaKit” version 1.2 is not installed import QtMultimediaKit 1.2”.
2. 对程序的影响 希望开发者使用正确的版本号。如果有应用受到影响,那将是应用程序层面的错误

3. 解决方案 这是计划中的变化。必须在应用程序中正确使用版本号。

在Symbian中导入Qt Quick组件的变化

1. 背景 在组件1.1被安装到设备之后,“import Qt.labs.components.native 1.0” 将不再使用,1.1预装到了新的Belle发布版本中。使用“import com.nokia.symbian 1.0” 代替。

2. 对程序的影响 这个对3rd party的应用来说不会是问题,因为已经推荐导入“com.nokia。symbian。1.0“.

3. 解决方案 这是计划中的改变。在开发应用注意正确的行为。

symbian 中Qt Quick组件里的Window anchor 的变化

1. 背景 这个变化计划在4.8中实现。任何child items都不应该直接定位到Window的根item上,而应该用parent代替:例如错误的使用方法:

Window {
id: root
Statusbar {
anchors.top: root.top
}
ToolBar {
anchors.bottom: root.bottom
}
}

正确使用方法是:

Window {
id: root
Statusbar {
anchors.top: parent.top
}
ToolBar {
anchors.bottom: parent.bottom
}
}

2. 对程序的影响 为了保证应用程序在以后的正常运行,现在就必须遵从这个规则

3.解决方案 这是计划中的变化,正确使用这个规则。

QWidget中的方向检测--基于symbian应用程序

1.背景 在resize event期间使用 QApplication::desktop()->availableGeometry() 探测方向将会引起错误的结果. 推荐连接QApplication::desktop()的workAreaResized(int)信号,并在相应的槽函数中调用QApplication::desktop()->availableGeometry()方法。
2.影响 这个变化已经在Qt4.6和Qt4.7之间引入了,所以它也适用于Symbian Anna.

3. 解决方案 不赞成在移动设备上使用QWidget,强烈推荐开发者使用Qt Quick重写他们的应用

相关链接

This page was last modified on 19 July 2012, at 08:37.
191 page views in the last 30 days.
×