
它运行得很好.但是在平均运行10-20分钟后,我得到了这个例外:
01-14 08:51:25.000 3740-3740/com.myPackage E/AndroIDRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalStateException: onMeasure() dID not set the measured dimension by calling setMeasuredDimension() at androID.vIEw.VIEw.measure(VIEw.java:15200) at androID.Widget.relativeLayout.measureChild(relativeLayout.java:602) at androID.Widget.relativeLayout.onMeasure(relativeLayout.java:415) at androID.vIEw.VIEw.measure(VIEw.java:15195) at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4823) at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310) at androID.vIEw.VIEw.measure(VIEw.java:15195) at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4823) at androID.Widget.linearLayout.measureChildBeforeLayout(linearLayout.java:1390) at androID.Widget.linearLayout.measureVertical(linearLayout.java:681) at androID.Widget.linearLayout.onMeasure(linearLayout.java:574) at androID.vIEw.VIEw.measure(VIEw.java:15195) at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4823) at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.onMeasure(PhoneWindow.java:2340) at androID.vIEw.VIEw.measure(VIEw.java:15195) at androID.vIEw.VIEwRootImpl.performMeasure(VIEwRootImpl.java:1850) at androID.vIEw.VIEwRootImpl.measureHIErarchy(VIEwRootImpl.java:1102) at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1275) at androID.vIEw.VIEwRootImpl.doTraversal(VIEwRootImpl.java:1000) at androID.vIEw.VIEwRootImpl$TraversalRunnable.run(VIEwRootImpl.java:4216) at androID.vIEw.Choreographer$CallbackRecord.run(Choreographer.java:725) at androID.vIEw.Choreographer.doCallbacks(Choreographer.java:555) at androID.vIEw.Choreographer.doFrame(Choreographer.java:525) at androID.vIEw.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:711) at androID.os.Handler.handleCallback(Handler.java:615) at androID.os.Handler.dispatchMessage(Handler.java:92) at androID.os.Looper.loop(Looper.java:137) at androID.app.ActivityThread.main(ActivityThread.java:4813) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:559) at dalvik.system.NativeStart.main(Native Method)
AndroID documention说:
测量视图及其内容以确定测量的宽度和测量的高度.此方法由measure(int,int)调用,并应由子类覆盖,以提供对其内容的准确有效的测量.
我认为谷歌的原始实现是这样的:
@OverrIDe protected voID More ...onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) { int wIDth = getDefaultSize(mRequesteDWIDth,wIDthMeasureSpec); int height = getDefaultSize(mRequestedHeight,heightmeasureSpec); setMeasuredDimension(wIDth,height); } 我不知道我应该在这里实施什么.
我认为表面视图的大小永远不会改变.
注意:
我的SurfaceVIEw包含在relativeLayout中.
该例外由一个孩子调用,但它是一个视图(异常中的第3行)
如果你知道我怎么能解决这个烦人的BUG,请帮助我.
编辑:
在Activity的onCreate中,我从代码中设置了视图(扩展形式为SurfaceVIEw)的大小
Answear评论:
这是我为所需大小设置一些公共字段的方法:
Parameters.initialize(getResources().getdisplayMetrics().wIDthPixels,getResources().getdisplayMetrics().heightPixels);
Parameters.initialize:
public static voID initialize(int screenWIDth,int screenHeight){ FIELD_WIDTH = screenWIDth; FIELD_HEIGHT = (int)(0.92f * screenHeight);} MyVIEw是用xml编写的.
然后我在上面设置了一些东西:
public class MyVIEwManager { protected MyVIEw mMyVIEw; public FIEldPainterComp(MainActivity activity) { super(activity); initialize(); } private voID initialize(){ mMyVIEw= (MyVIEw) activity.findVIEwByID(R.ID.vMyVIEw); mMyVIEw.getLayoutParams().height = Parameters.FIELD_HEIGHT; mMyVIEw.getLayoutParams().wIDth = Parameters.FIELD_WIDTH; }} 整个过程在一开始就发生了.
androID:screenorIEntation="landscape"
屏幕永远不会变暗.游戏正在运行,只是异常即将到来.
我应该在某处调用措施吗?
我不明白为什么很久以后就会开心呢
必须与此相关的其他一些例外:
01-19 11:53:39.812 29666-31881/com.mypackage V/GAV4﹕ Thread[disconnect check,5,main]: disconnecting due to inactivity01-19 11:53:39.812 29666-31881/com.mypackage V/GAV4﹕ Thread[disconnect check,main]: disconnected from service01-19 11:57:17.732 29666-29666/com.mypackage D/AndroIDRuntime﹕ Shutting down VM01-19 11:57:17.732 29666-29666/com.mypackage W/dalvikvm﹕ threadID=1: thread exiting with uncaught exception (group=0x420face0)01-19 11:57:17.812 29666-29666/com.mypackage V/GAV4﹕ Thread[main,main]: Tracking Exception: IllegalStateException (@VIEw:measure:16533) {main}01-19 11:57:17.832 29666-29666/com.mypackage V/GAV4﹕ Thread[main,main]: dispatch call queued. dispatch will run once initialization is complete.01-19 12:19:27.982 29666-29670/com.mypackage I/dalvikvm﹕ threadID=3: reacting to signal 301-19 12:19:28.262 29666-29670/com.mypackage I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt'01-19 12:19:32.452 29666-29666/com.mypackage A/libc﹕ Fatal signal 6 (SIGABRT) at 0x0000025a (code=0),thread 29666 (ames.adaptation) GAV是谷歌分析的东西.
我发布了另一个关于ANR:ANR with 3 threads – using locks的问题
解决方法setMeasuredDimension()
必须在onMeasure()方法内部调用.我有一个类似的问题,逻辑没有达到setMeasuredDimension().我解决了强制调用setMeasuredDimension()的问题,无论if / else语句在它之前是什么.
总结以上是内存溢出为你收集整理的android – SurfaceView onMeasure()没有通过调用setMeasuredDimension()来设置测量的维度全部内容,希望文章能够帮你解决android – SurfaceView onMeasure()没有通过调用setMeasuredDimension()来设置测量的维度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)