Я как бы новый для java и android. Теперь я использую холст, чтобы рисовать на поверхности, потому что скорость выше, чем вид клиента. Но когда речь идет о синхронном представлении поверхности в андроида я получаю вид запутатьСинхронизированный вид поверхности Android
Я принимаю эту ссылку в качестве ссылки http://android-er.blogspot.com/2010/05/android-surfaceview.html также андроида лунного посадочного модуля
У меня есть две версии, которые немного измененную форму пример когда я пишу часть метода выполнения потока рендеринга surfaceview, но я не уверен, какой из них более правилен в концепции. Они оба работают, Но я просто хочу очистить свои концепции.
Спасибо за любую помощь и предложения в передовых и, если у меня есть задать вопрос неправильно, пожалуйста, также поправил меня :)
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);
}
}
}
}
Редакция
I n дополнительно синхронизировал представление поверхности. Я также хочу добавить блокировку для управления данными, которые обмениваются данными между 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;
}
Является ли это st плохой не очень хорошая идея?
Моя концепция хотите добавить блокировку между функцией процесса и метода OnDraw:
Привет Могу ли я спросить Более близкий вопрос ~ Я отредактировал свой вопрос и спасибо за вашу помощь. – user1316408
отредактировал его о booleans – edthethird
Большое спасибо и жаль, что я так поздно ответил Я думаю, что я могу использовать атомный булев, чтобы синхронизировать его, Причина, по которой я хочу блокировать обновление, - это те, которые я хочу сделать, это изменение по основной деятельности и во время данных процесса я не хочу, чтобы поверхность смотрела на данные, но я не уверен, что моя концепция правильная или нет :) – user1316408