私はJavaとAndroidが初めてです。現在、顧客ビューよりも速度が速いため、キャンバスを使用して表面ビューに描画しています。しかし、アンドロイドでサーフェスビューを同期することになると、ちょっと混乱します
このリンクを参照 http://android-er.blogspot.com/2010/05/android-surfaceview.htmlとして も、Android 月着陸船を使用します。
SurfaceView レンダリング スレッドの実行メソッド部分を記述するときに、フォームの例を少し変更したバージョンが 2 つありますが、どちらが概念的に正しいかはわかりません。どちらも機能しますが、概念を明確にしたいだけです。
事前のヘルプと提案に感謝します。間違った方法で質問した場合は、私も修正してください:)
バージョン 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 メソッドの間にロックを追加したいということです: