意外的android系统调用可以平滑显示滚动图形的口吃

意外的android系统调用可以平滑显示滚动图形的口吃,第1张

概述我目前正在编写一个应该以滚动方式显示实时测量曲线的应用程序(想想ECG记录仪或示波器).UI-Thread中的意外系统调用会使显示结果不稳定.数据通过蓝牙输入.一切正常,显示平滑滚动,平均更新速率为26帧/秒.但是,尽管如此,显示器仍然很明显.我使用traceview来获得更多洞察力,并且根

我目前正在编写一个应该以滚动方式显示实时测量曲线的应用程序(想想ECG记录仪或示波器). UI-Thread中的意外系统调用会使显示结果不稳定.

数据通过蓝牙输入.一切正常,显示平滑滚动,平均更新速率为26帧/秒.但是,尽管如此,显示器仍然很明显.

我使用tracevIEw来获得更多洞察力,并且根据tracevIEw,口吃是对android / vIEw / VIEwRoot.handleMessage的调用的结果,平均每次调用持续131毫秒.
如果我在tracevIEw中进一步挖掘,那么循环就会在androID / vIEw / VIEwRoot.performTraversals中被烧掉.在对androID / vIEw / VIEw.measure的大多数递归调用中消耗了92%的cpu周期.

从那里它由于递归调用结构而变得复杂.但我可以找到对linearLayout,FrameLayout和relativeLayout的onMeasure()方法的调用.每种布局类型的onMeasure()方法消耗大约相同的cpu周期.这很奇怪,因为在我的活动中我只使用一个简单的linearLayout只有2个元素.
我只是没有理由为什么假设重新布局一个带有2个元素的linearLayout执行对未使用的布局的调用,并且需要高达131毫秒才能做到这一点.

更多信息:

>平台HTC渴望HD与Android 2.3.1.
>我使用处理程序在UI线程中执行绘图.
>布局是一个简单的linearLayout,包含2个元素:自定义视图和textFIEld.
>使用getwindow()隐藏状态栏.setFlags(WindowManager.LayoutParams.FLAG_FulLSCREEN,WindowManager.LayoutParams.FLAG_FulLSCREEN);.
>对每个新数据块执行绘图,大约到达.每50毫秒.
>绘图本身使用画布,其性能足以跟上传入的数据.

经过长时间的解释,以下是问题:

>什么是调用androID / vIEw / VIEwRoot.handleMessage? (调用每隔850毫秒相对相等,没有明显的链接(没有直接调用,调用次数和相对位置没有链接到绘图的消息处理程序)到我的Activity的任何活动)
>我如何抑制对androID / vIEw / VIEwRoot.handleMessage的调用,或者如何让它们更快(我的linearLayout中只有2个元素)
>对未使用的布局的调用首先让我想到状态栏或一些隐藏的活动(例如主屏幕),它们可能使用这种布局.但是为什么这些电话是我活动的一部分呢?据我所知,跟踪应该只跟踪活动进程.例如产生实时数据的服务调用不是跟踪的一部分.
>是否有可能跟踪某些系统组件的单个呼叫?当我放大tracevIEw时,我看到这个调用顺序:toplevel – > androID / os / Message.clearForRecycle() – > androID / os / MessageQueue.nativePollOnce() – > androID / os / SystemClock.uptimeMillis() – > com / htc / profileflag / ProfileConfig.getProfilePerformance() – > androID / os / Handler.dispatchMessage() – >机器人/视图/ VIEwRoot.performTraversals()
>非主题:是否有可能导出除了截图以外的tracevIEw(parent-children-cpu time等)内显示的数据?

解决方法:

好的,我找到了长时间调用androID / vIEw / VIEwRoot.handleMessage的原因.
这确实是由我的申请引起的.

我的应用程序有2个屏幕(活动),一个具有复杂的状态信息布局,另一个显示传入数据的实时显示.

通过蓝牙进入的数据包含混合的实时数据和状态数据.当我切换到实时Activity时,我用finish()停止状态Activity;在开始新的实时活动之后.不幸的是,这还不足以阻止消息处理程序,它在UI线程中接收新的状态信息,并继续在不可见和完成的Activity中更新状态数据.此活动的重新布局导致实时数据的断断续续.

现在已经解决了.显示滚动现在合理平滑.

谢谢你的耐心.对于任何在stackoverflow上遇到此Thread的人来说,它可能会有用.

jepo

总结

以上是内存溢出为你收集整理的意外的android系统调用可以平滑显示滚动图形的口吃全部内容,希望文章能够帮你解决意外的android系统调用可以平滑显示滚动图形的口吃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1105549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存