- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
每次我调用这些方法时,都需要 14-20 毫秒才能继续。
Canvas canvas = holder.lockCanvas();
holder.unlockCanvasAndPost(canvas);
这是正常行为吗?我应该采取不同的方法吗?
这是完整的代码
public class Render extends SurfaceView {
Context c = null;
SurfaceHolder holder;
volatile boolean running = true;
public Render(Context c) {
super(c);
this.c = c;
this.holder = getHolder();
}
public void run() {
if(running) {
if(!holder.getSurface().isValid()){
System.out.println("not valid");
return;
}
Canvas canvas = holder.lockCanvas();
holder.unlockCanvasAndPost(canvas);
}
}
}
追踪:
01-05 15:49:20.322: I/System.out(4892): Frame time: 0 ms frame291
01-05 15:49:20.322: I/System.out(4892): not valid
01-05 15:49:20.322: I/System.out(4892): Frame time: 0 ms frame292
01-05 15:49:20.332: I/System.out(4892): Frame time: 2 ms frame293
01-05 15:49:20.357: I/System.out(4892): Frame time: 22 ms frame294
01-05 15:49:20.357: I/System.out(4892): Frame time: 1 ms frame295
01-05 15:49:20.362: I/System.out(4892): Frame time: 1 ms frame296
01-05 15:49:20.367: D/CLIPBOARD(4892): Hide Clipboard dialog at Starting input: finished by someone else... !
01-05 15:49:20.367: I/System.out(4892): Frame time: 8 ms frame297
01-05 15:49:20.377: I/System.out(4892): Frame time: 10 ms frame298
01-05 15:49:20.397: I/System.out(4892): Frame time: 16 ms frame299
01-05 15:49:20.412: I/System.out(4892): Frame time: 16 ms frame300
01-05 15:49:20.427: I/System.out(4892): Frame time: 16 ms frame301
更新
package android.apps.td;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
public class Render extends GLSurfaceView implements Renderer {
private final int MILLION = 1000000;
private long frame;
public Render(Context context) {
super(context);
setRenderer(this);
// TODO Auto-generated constructor stub
}
public void onDrawFrame(GL10 arg0) {
System.out.println("Frame "+(System.nanoTime()-frame)/MILLION+" ms");
frame = System.nanoTime();
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
System.out.println("Surface changed w:"+width+" h:"+height);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
System.out.println("Surface created");
}
}
最佳答案
我发现了这篇文章:http://replicaisland.blogspot.com/2009/10/rendering-with-two-threads.html
eglSwapBuffers() 可能在 onDrawFrame 之后调用并阻塞,直到硬件完成绘制然后交换缓冲区,这需要 16.67 毫秒的最小延迟。
关于android - SurfaceHolder.lockCanvas() 太贵了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736194/
我正在使用 MediaRecorder 捕捉视频。部分代码如下。 surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
在根据需要创建服务时,surfaceView 和 surfaceHolder 通过 intent 传递给服务。如何在服务端提取相同的内容。一直在尝试这个,但未能成功。 Activity : inten
如何在不使用 SurfaceHolder 的情况下获取手机的宽度或高度? 最佳答案 使用 DisplayMetrics displaymetrics = new DisplayMetrics();
我正在为 Android 中的动态壁纸实现一个渲染循环。我在 Internet 上找到的所有示例都包含这样的渲染循环: public void run() { while (mRunning)
当尝试从服务(无 GUI)拍照时,在某些设备上,我收到 RuntimeException。但是,如果我使用 SurfaceHolder 从 Activity 中拍照,它就会起作用。 Camera.Pa
我正在开发一款安卓游戏,我正在使用 SurfaceView。我有一个每 16 毫秒调用一次的方法(我想要 60fps) public void myDraw(SurfaceHolder holder)
我正在尝试使用 onPreviewFrame() 回调显示经过过滤的相机预览。 问题是当我删除这一行时: mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH
我想写一个球在屏幕上移动的程序,因此,我看了很多教程,但我无法理解这一行: mHolder = getHolder(); mHolder.addCallback(this); addCallback
每次我调用这些方法时,都需要 14-20 毫秒才能继续。 Canvas canvas = holder.lockCanvas(); holder.unlockCanvasAndPost(canvas)
这里是 Android 编程新手。 我环顾四周,发现这是一个常见问题,但我并没有真正看到一个简单的解决方案...我正在尝试在 Nexus 7 上运行以下代码(已尝试过 AVD 和物理设备)没有任何运气
我试图让应用程序每半秒在 Canvas 上绘制一些东西,但是 SurfaceHolder.getSurface().isValid() 返回 false,当我调用 SurfaceHolder.lock
我正在制作游戏,由于我是 Android 的新手,所以我的设计基于示例 LunarLander code .在其设计中,GameThread.doStart() 从 GameActivity 调用,然
我正在尝试编写一个使用相机的应用程序。当我试图获取我最终传递给启动相机的 surfaceCreated() 的 surfaceHolder 时,我得到了一个 NullPointerException。
我正在使用 Android SDK 实现一个相当标准的应用程序,其中涉及使用 SurfaceView、SurfaceHolder、Callback 设置进行绘图。 在我的主线程(UI 线程)中,我没有
我正在尝试创建一个 Canvas 并使用以下代码向其绘制位图: Paint paint = new Paint(); InputStream is = assets.open("card_art" +
void android.view.SurfaceHolder.setType(int type) public abstract void setType (int type) Since: API
我一直在尝试实现一个需要在表面上进行相机预览的应用程序。正如我所看到的, Activity 和表面生命周期都包含以下状态: 当我第一次启动我的 Activity 时:onResume()->onSur
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在制作基本的动态壁纸。代码在我的“运行 ICS 的 Galaxy S2(GT-I9100)” 上运行良好,函数返回正确的高度和宽度值。但是当我尝试在不同的设备上运行相同的 apk "Galaxy
我在市场上有一款 Android 游戏,在尝试使用 Canvas 时收到 NullPointers 的崩溃报告。我可以假设这是因为 SurfaceHolder.lockCanvas() 正在返回 nu
我是一名优秀的程序员,十分优秀!