Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么导致Android';什么是LogCat?_Android_Logging_Opengl Es_Logcat - Fatal编程技术网

是什么导致Android';什么是LogCat?

是什么导致Android';什么是LogCat?,android,logging,opengl-es,logcat,Android,Logging,Opengl Es,Logcat,我正在做Android OpenGL ES实验,看看它在不同手机上的表现。在我的Logcat中,我得到标记为“SharedBufferStack”的日志消息,下面有两行 出列:尾部=0,头部=1,有效性=2,排队=0 出列:尾部=1,头部=0,有效性=2,排队=0 重复几次,即使我不使用该应用程序(没有触摸或按钮按下,并且阻止它睡眠)。我想知道是什么导致了它,即使它不是一个错误。它会影响性能吗 更重要的是,如何删除它 我将标准Eclipse与Android SDK一起使用TLDR版本:由调用Op

我正在做Android OpenGL ES实验,看看它在不同手机上的表现。在我的Logcat中,我得到标记为“SharedBufferStack”的日志消息,下面有两行

出列:尾部=0,头部=1,有效性=2,排队=0

出列:尾部=1,头部=0,有效性=2,排队=0

重复几次,即使我不使用该应用程序(没有触摸或按钮按下,并且阻止它睡眠)。我想知道是什么导致了它,即使它不是一个错误。它会影响性能吗

更重要的是,如何删除它


我将标准Eclipse与Android SDK一起使用

TLDR版本:由调用OpenGL ES的onDrawFrame()中的Thread.sleep()引起

我在下面的链接中看到了他们的代码。

所以这个SharedBufferStack是Android的SurfaceFlinger的一部分,在

Surfaceflinger:它是一个系统范围的surface composer函数,驻留在android框架中。它从不同的应用程序(可能是2D或3D)获取数据(即曲面),最后将其合并以获得一个主曲面,该曲面将被送入内存(即帧缓冲区)。 Surfaceflinger根据曲面的位置、大小和其他参数合成所有曲面,虽然该合成是由OpenGL(由Surfaceflinger调用)完成的,但我们需要Surfaceflinger来计算重叠函数等相关参数

这意味着SharedBufferStack可供不同的应用程序共享图形界面的内存(如果我错了,请纠正我)

在第281行和第282行,它是调用LOGW(Logcat调用的警告)的地方

LOGW("dequeue: tail=%d, head=%d, avail=%d, queued=%d",
            tail, stack.head, stack.available, stack.queued);
如果读取函数块的其余部分,SharedBufferClient::dequeue将尝试警告堆栈为空/接近空

如果我胡乱猜测的话,我认为“图形”堆栈至少需要打开一些东西,否则它就没有什么可显示的了。我仍然不知道为什么它在tail=0和stack.head=1时调用stack.head==tail。我看不出它实际上是一堆

==更新1

显然,经过更多的测试后,我在OpenGL ES循环的onDrawFrame中调用了Thread.sleep。由于RENDERMODE_持续不正确地控制帧速率(因为我想将其限制为每秒30帧,而不是让它运行得太快),所以我让线程在剩余的时间内休眠

Thread.sleep(16 - diffTime);
如果我是对的,它会休眠opengl线程。显然,它会导致上面的消息出现,而且听起来不太好,因为您将图形线程从堆栈中移除。我认为我可以做的一种方法是运行一个单独的线程,当渲染模式脏时调用onDrawFrame来渲染。另一种方法是让它以同样快的速度运行,但每隔0.017s(60fps)的间隔调用逻辑循环或控制器,以获取动画和其他内容

==更新2


我做了一个让图像尽可能快地渲染的例子,但要花时间找出何时运行逻辑。

感谢您的编辑提示:)