首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Symbian >

5800 中反复创建CBrCtlInterface,会出现kern-exec 3异常!怎么解决

2012-03-06 
5800 中反复创建CBrCtlInterface,会出现kern-exec 3错误!如何解决?如果在一个view的container中创建了一个

5800 中反复创建CBrCtlInterface,会出现kern-exec 3错误!如何解决?
如果在一个view的container中创建了一个CBrCtlInterface,切换到另一个view时删除这个CBrCtlInterface,再次切换回这个view时就会报kern-exec 3错误!

[解决办法]
应该可以反复创建。试试SDK附带的例子:
C:\S60\devices\S60_5th_Edition_SDK_v1.0\S60CppExamples\BrCtlSampleApp

此外,看看是不是这个问题:
http://wiki.forum.nokia.com/index.php/KIS000879_-_Deleting_an_object_of_CBrCtlInterface_may_cause_a_panic
[解决办法]
Deleting an object of CBrCtlInterface when the controller is still loading a Web page can cause a Kern-Exec 3 Panic. This known issue occurs in some old S60 3rd Edition devices using the old Browser Engine (Services).

The only way to avoid the panic is to not delete the CBrCtlInterface object before the Web page has been fully loaded. If the Web page is loading when user wants to quit, open an empty Web page calling the CBrCtlInterface::LoadUrl() function and wait until the empty page has been loaded and then call AppUi::Exit(). This is done because loading an empty page is more likely faster than waiting for the current Web page to be loaded.

The MBrCtlLoadEventObserver::HandleBrowserLoadEventL function can be used to observe the state changes of the Web page loading task. For instance, the function can be used to observe when the page has been fully loaded and application closing is possible.



楼上正解,我也遇到过。。。
[解决办法]
不难理解,对象被删除,还要让对象做事当然会Panic.
[解决办法]
刚才运行一遍SDK附带的例子: 
C:\S60\devices\S60_5th_Edition_SDK_v1.0\S60CppExamples\BrCtlSampleApp 
其中有删除/新建操作,但没有碰到异常。
[解决办法]
刚才运行5th SDK附带的例子: 
C:\S60\devices\S60_5th_Edition_SDK_v1.0\S60CppExamples\BrCtlSampleApp 
其中有删除/新建操作,未见异常。
[解决办法]
指针在使用之前最好是判空,根据逻辑操作。。
而且delete 完了之后要置空。要不就是野指针了。。。
[解决办法]
等LoadUrlL完完全全完成后,再删除iBrCtlInterface,还会panic吗?
[解决办法]
可能其它指针问题.
[解决办法]
刚刚在3rd的手机上试了3rd\S60Ex\BrCtlSampleApp,没有什么异常啊!
[解决办法]
抱歉,还没有5th的手机~
[解决办法]
BrCtlSampleApp例子中的相关重建代码如下:

C/C++ code
voidCBrCtlSampleAppContainer::CreateBrowserControlWithObserversL(TUint aCapabilities)    {    if (iBrCtlCapabilities != aCapabilities)        {        delete iBrCtlInterface;        iBrCtlInterface = NULL;        }    iBrCtlCapabilities = aCapabilities;    if (iBrCtlInterface == NULL)        {        TRect rect(Position(), Size());        iBrCtlInterface = CreateBrowserControlL( this,            rect,            iBrCtlCapabilities,            TBrCtlDefs::ECommandIdBase,            iBrCtlSampleAppSoftkeysObserver,            iBrCtlSampleAppLinkResolver,            iBrCtlSampleAppSpecialLoadObserver,            iBrCtlSampleAppLayoutObserver);        iBrCtlInterface->AddLoadEventObserverL(iBrCtlSampleAppLoadEventObserver);        iBrCtlInterface->AddStateChangeObserverL(iBrCtlSampleAppStateChangeObserver);        }    }
[解决办法]
在5th sdk help看看在5版里对CBrCtlInterface使用有什么要求.
------解决方案--------------------


不要反复创建浏览器的示例,问题很多。
symbian平台不同于其他平台,没有那么高的容错性
[解决办法]
上面给出的可以重复创建的测试结果是在S60 5th模拟器下进行的。后将本地URL(file://)改为远程URL(http://),删除时会有Panic发生。这可能是否由于删除时URL尚未访问完毕导致的(见1#回复链接)。可能的解决方法:1、删除前总是等待URL访问结束,应该可以在URLLoad回调接口中得到通知。2、删除前总是装入本地的一个空白页面,以便能迅速装载完成。

第1种方法应该总是可靠的,但URL装入时间过长的话会导致响应不好。第2种方法装入比较迅速,但也有风险,不排除仍有删除时尚未装载完毕的可能。

可靠的做法:同时结合这两种方法,就是删除前总是装入一个空白页面,然后等到收到装载完成通知时才正式删除对象、重建。

以上是我根据CBrCtlInterface的表现及1#链接给出的分析,就如何避免该问题的一个分析,尚未得到证实,仅供参考。希望有助于解决这个问题。


[解决办法]
有这样一个办法:CBrCtlInterface对象创建后不要删除,直到app要退出为止。
[解决办法]

探讨
...希望symbian的开发人员,...

[解决办法]
symbian平台相当恶心!
[解决办法]
你进度严重滞后,boss没说什么啊?

热点排行