【发布时间】:2012-05-23 18:04:48
【问题描述】:
我对 java 和 android 有点陌生。 现在我使用画布在表面视图上绘制,因为速度比客户视图快。 但是当谈到在android中同步表面视图时,我有点困惑
我将此链接作为参考 http://android-er.blogspot.com/2010/05/android-surfaceview.html 还有安卓月球着陆器
当我编写surfaceview渲染线程运行方法部分时,我有两个版本稍微修改了表单示例,但我不确定哪个版本在概念上更正确。他们都工作, 但我只是想弄清楚我的概念。
感谢您的任何帮助和建议,如果我以错误的方式提出问题,也请纠正我:)
版本1:
protected void run()
{
while (isRunning)
{
if(RenderThreadSurfaceHolder.getSurface().isValid())
{
Canvas Draw = null;
try
{
Draw =RenderThreadSurfaceHolder.lockCanvas(null);
synchronized (RenderThreadSurfaceHolder){
if(Draw!=null)
{
RenderThreadSurfaceView.onDraw(Draw);
}
}
}
finally{
if(Draw!=null)
{
RenderThreadSurfaceHolder.unlockCanvasAndPost(Draw);
}
}
}
}
}
第 2 版:
protected void run()
{
while (isRunning)
{
Canvas Draw = null;
try
{
synchronized (RenderThreadSurfaceHolder)
{
if(RenderThreadSurfaceHolder.getSurface().isValid())
{
Draw=RenderThreadSurfaceHolder.lockCanvas(null);
if(Draw!=null)
{
RenderThreadSurfaceView.onDraw(Draw);
}
}
}
}
finally
{
if (Draw != null)
{
RenderThreadSurfaceHolder.unlockCanvasAndPost(Draw);
}
}
}
}
编辑
在额外同步的表面视图中我还想加一个锁来控制Activity和OnDraw方法之间共享数据的数据 因为我认为同步大量数据和大量进程功能开销太大 所以我只想同步一个布尔值,但是我在互联网上做的研究说 同步布尔值真的不是一个好主意//仍然让我很困惑 比如
synchronized (Check)
{
Check=true;
}
但是如果我做下面这样的事情
private static lock Lock; //declare in the Activity
public synchronized void setlock(boolean newlock)
{
if (newlock!=lock){
lock = newlock;
}
}
public synchronized boolean isTrue() {
return lock;
}
这仍然不是一个好主意吗?
我的想法是想在流程函数和 OnDraw 方法之间加锁:
【问题讨论】:
标签: java android android-canvas surfaceview synchronized