x86平台,android运行过程中,会随机出现如题所述问题,以下是某次的logcat:
D/installd(  115): DexInv: --- BEGIN '/system/app/JETBoy.apk' ---
D/dalvikvm(  395): DexOpt: load 7ms, verify 33ms, opt 0ms
D/installd(  115): DexInv: --- END '/system/app/JETBoy.apk' (success) ---
D/JetBoy  (  390): opening jet file
D/JetBoy  (  390): opening jet file DONE
D/JetBoy  (  390):  start queuing jet file
D/JetBoy  (  390):  start queuing jet file DONE
D/dalvikvm(  390): GC freed 717 objects / 53848 bytes in 25ms
D/dalvikvm(  390): GC freed 68 objects / 2704 bytes in 24ms
D/dalvikvm(  390): GC freed 36 objects / 1760 bytes in 24ms
D/JetBoy  (  390): @@@ done creating view!
D/dalvikvm(  390): GC freed 300 objects / 16344 bytes in 24ms
D/dalvikvm(  390): GC freed 23 objects / 912 bytes in 20ms
I/ActivityManager(  130): Displayed activity com.example.android.jetboy/.JetBoy: 1313 ms (total 1313 ms)
E/JET_JNI (  390): android_media_JetPlayer_pause(): failed to pause with EAS error code -31
E/SurfaceComposerClient(  130): openGlobalTransaction() called more than once. skipping.
E/SurfaceComposerClient(  130): Not in transaction (client=0x8c6ded0, SurfaceID=0, mTransactionOpen=0
W/WindowManager(  130): Error updating surface in Window{b074a9d8 com.example.android.jetboy/com.example.android.jetboy.JetBoy paused=false}
W/WindowManager(  130): java.lang.IllegalArgumentException
W/WindowManager(  130):         at android.view.Surface.setAlpha(Native Method)
W/WindowManager(  130):         at com.android.server.WindowManagerService.performLayoutAndPlaceSurfacesLockedInner(WindowManagerService.java:10186)
W/WindowManager(  130):         at com.android.server.WindowManagerService.performLayoutAndPlaceSurfacesLocked(WindowManagerService.java:9256)
W/WindowManager(  130):         at com.android.server.WindowManagerService.finishDrawingWindow(WindowManagerService.java:2540)
W/WindowManager(  130):         at com.android.server.WindowManagerService$Session.finishDrawing(WindowManagerService.java:6709)
W/WindowManager(  130):         at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:212)
W/WindowManager(  130):         at com.android.server.WindowManagerService$Session.onTransact(WindowManagerService.java:6648)
W/WindowManager(  130):         at android.os.Binder.execTransact(Binder.java:287)
W/WindowManager(  130):         at com.android.server.SystemServer.init1(Native Method)
W/WindowManager(  130):         at com.android.server.SystemServer.main(SystemServer.java:497)
W/WindowManager(  130):         at java.lang.reflect.Method.invokeNative(Native Method)
W/WindowManager(  130):         at java.lang.reflect.Method.invoke(Method.java:521)
W/WindowManager(  130):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
W/WindowManager(  130):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
W/WindowManager(  130):         at dalvik.system.NativeStart.main(Native Method)
I/WindowManager(  130): Out of memory for surface!  Looking for leaks...
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b073a9d8 com.android.internal.service.wallpaper.ImageWallpaper paused=false} surface=Surface(native-token=1470}
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b06b95e0 com.android.launcher/com.android.launcher.Launcher paused=false} surface=Surface(native-token=1472204}
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b0765bf8 SurfaceView paused=false} surface=Surface(native-token=147874072) token=AppWindowToken{b0839438 token}
E/Surface (  390): error dequeuing a buffer (Unknown error: -19)
E/Surface (  390): dequeueBuffer failed (No such device)
E/SurfaceHolder(  390): Exception locking surface
E/SurfaceHolder(  390): java.lang.IllegalArgumentException
E/SurfaceHolder(  390):         at android.view.Surface.lockCanvasNative(Native Method)
E/SurfaceHolder(  390):         at android.view.Surface.lockCanvas(Surface.java:288)
E/SurfaceHolder(  390):         at android.view.SurfaceView$2.internalLockCanvas(SurfaceView.java:680)
E/SurfaceHolder(  390):         at android.view.SurfaceView$2.lockCanvas(SurfaceView.java:663)
E/SurfaceHolder(  390):         at com.example.android.jetboy.JetBoyView$JetBoyThread.run(JetBoyView.java:663)
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b074a9d8 com.example.android.jetboy/com.example.android.jetboy.JetBoy paused=false} surface=Surface(native-tok}
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b06510c8 StatusBarExpanded paused=false} surface=Surface(native-token=147019560) token=AppWindowToken{b0839438}
W/WindowManager(  130): LEAKED SURFACE (app token hidden): Window{b076f740 StatusBar paused=false} surface=Surface(native-token=145184728) token=AppWindowToken{b0839438 token=H}
W/WindowManager(  130): Looks like we have reclaimed some memory, clearing surface for retry.
W/WindowManager(  130): Due to memory failure, waiting a bit for next layout
W/dalvikvm(  390): threadid=19: thread exiting with uncaught exception (group=0xb6044c50)
E/AndroidRuntime(  390): Uncaught handler: thread Thread-8 exiting due to uncaught exception
E/AndroidRuntime(  390): java.lang.NullPointerException
E/AndroidRuntime(  390):        at com.example.android.jetboy.JetBoyView$JetBoyThread.doDrawReady(JetBoyView.java:609)
E/AndroidRuntime(  390):        at com.example.android.jetboy.JetBoyView$JetBoyThread.doDraw(JetBoyView.java:483)
E/AndroidRuntime(  390):        at com.example.android.jetboy.JetBoyView$JetBoyThread.run(JetBoyView.java:665)
I/Process (  130): Sending signal. PID: 390 SIG: 3
E/ActivityThread(  130): Failed to find provider info for android.server.checkin
E/Checkin (  130): Error reporting crash: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/crashes
I/dalvikvm(  390): threadid=7: reacting to signal 3
I/dalvikvm(  390): Wrote stack trace to '/data/anr/traces.txt'
E/Surface (  211): surface (id=0, identity=67) is invalid, err=-19 (No such device)
E/Surface (  211): dequeueBuffer failed (No such device)
E/ViewRoot(  211): IllegalArgumentException locking surface
E/ViewRoot(  211): java.lang.IllegalArgumentException
E/ViewRoot(  211):      at android.view.Surface.lockCanvasNative(Native Method)
E/ViewRoot(  211):      at android.view.Surface.lockCanvas(Surface.java:288)
E/ViewRoot(  211):      at android.view.ViewRoot.draw(ViewRoot.java:1283)
E/ViewRoot(  211):      at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
E/ViewRoot(  211):      at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
E/ViewRoot(  211):      at android.os.Handler.dispatchMessage(Handler.java:99)
E/ViewRoot(  211):      at android.os.Looper.loop(Looper.java:123)
E/ViewRoot(  211):      at android.app.ActivityThread.main(ActivityThread.java:4363)
E/ViewRoot(  211):      at java.lang.reflect.Method.invokeNative(Native Method)
E/ViewRoot(  211):      at java.lang.reflect.Method.invoke(Method.java:521)
E/ViewRoot(  211):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/ViewRoot(  211):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/ViewRoot(  211):      at dalvik.system.NativeStart.main(Native Method)
I/Process (  390): Sending signal. PID: 390 SIG: 9出现该问题后,android的壁纸和statusbar都消失,home背景变黑。各位大侠帮忙看看,问题可能处在什么地方,谢谢!

解决方案 »

  1.   

    I/WindowManager( 130): Out of memory for surface! Looking for leaks...surface 内存溢出,造成的原因可能在于load进了比较大的图片,运行时内存不足导致的。建议将系统的androidruntime.cpp中的opt.optionString改大,原始大小为-Xmx8m,可以将它设置更大"-Xmx64m"。或者将surface更新绘制部分的代码贴上来,可能有些地方需要优化。
      

  2.   


      先表示感谢,不过可能是版本原因,我的是android-eclair-x86-2.1,在AndroidRuntime.cpp没有-Xmx8m的类似定义...
      

  3.   


    如果是的话,那就是android自身有bug,因为android的源码什么都没改,也没有运行第三方的应用,倒是觉得可能是某些参数等引起了这样的问题
      

  4.   

    我找到了你说的参数设置,和老版本有些区别,默认是16m,我把它改大了,似乎问题没能解决。不知道,兄台对android内存的分配和管理熟不,或者可否推荐相关资料,谢谢!
    我的系统显示用的是framebuffer驱动,也许显存管理这里会有些问题。
      

  5.   

    1. 我对显示驱动不了解,只能根据经验来说一些解决方法而已,这个帮不了你呢。2. 从log上看
    E/JET_JNI ( 390): android_media_JetPlayer_pause(): failed to pause with EAS error code -31
    E/SurfaceComposerClient( 130): openGlobalTransaction() called more than once. skipping.
    E/SurfaceComposerClient( 130): Not in transaction (client=0x8c6ded0, SurfaceID=0, mTransactionOpen=0
    W/WindowManager( 130): Error updating surface in Window{b074a9d8 com.example.android.jetboy/com.example.android.jetboy.JetBoy paused=false}这是调用ap的jni有问题,最好去看下jni的源代码,感觉就是在复制图像或者读取图像时出了问题。
      

  6.   

    多谢啦,你讲的第二点中的android_media_JetPlayer_pause(): failed to pause with EAS error code -31,应该是音频有问题,这个我们这边已经解决了,但是在surface这块,运行还是不太稳定。目前来看,完全是随机出现,还未找到根本原因...
      

  7.   

    Surface Leak? Surface的创建和释放应该是由系统维护的。lz没有改过系统代码,这个问题就不好说了。我已经习惯Android经常出些莫名其妙的问题了
      

  8.   

    系统代码确实没有改过,现在很无语,同样的一套开发板,但是不同的板子上,出现问题的概率大不一样...现在我怀疑跟硬件会有一定的关系。你对android的内存分配与管理熟不?
      

  9.   


    怎么解决的??
    最近用surface 也出现这样的问题