我是一種新的java和android。 現在我使用畫布繪製表面視圖,因爲速度比客戶視圖更快。 但是,當涉及到同步的表面去Android我種得到的混淆同步的Android表面視圖
我把這個鏈接作爲參考 http://android-er.blogspot.com/2010/05/android-surfaceview.html 也是android的月球着陸器
我有兩個版本略作修改表單示例當我編寫surfaceview渲染線程run方法的一部分時,但我不確定哪一個在概念上更正確。他們都有效, 但我只想澄清我的概念。
感謝任何幫助和建議,先進的,如果我有問題問在錯誤的方式也請糾正我:)
VERSION1:
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);
}
}
}
}
編輯
我n額外的同步表面視圖我也想添加一個鎖來控制活動和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;
}
那是st生病不是個好主意?
我的概念是要添加的過程中的作用和方法的OnDraw之間的鎖定:
嗨,我可以問更多相關的問題〜我編輯了我的問題,謝謝你的幫助。 – user1316408
編輯它關於布爾值 – edthethird
非常感謝,很抱歉,我回復這麼晚, 我認爲我可以使用原子布爾值,而不是同步它, 我之所以想鎖定更新的原因是bcz我想繪製的東西是變化通過主要活動和過程數據時間,我不希望表面視圖訪問數據,但我不確定我的概念是否正確:) – user1316408