2011-06-23 47 views
2

我在android上執行了一個小問題。我正在使用OpenGL ES渲染一些東西。對於每一幀,我都必須更新日期。所以我決定放一個最大的FPS來避免無用的計算。Android上的FPS問題

但事情是,無論我每秒鐘的幀數是多少,我都沒有看到任何區別。即使我把1 fps。

下面是我的代碼位:

long now = SystemClock.elapsedRealtime(), diff;  
diff = now - CURRENT_TIME;  
if (diff < MILLISECOND_PER_FRAME)  
{  
    try  
    {  
    wait(MILLISECOND_PER_FRAME - diff);  
    }  
    catch(Exception e)  
    {}  
    now = SystemClock.elapsedRealtime();  
    diff = now - CURRENT_TIME;  
}  
CURRENT_TIME = now; 

所以,這一段代碼似乎沒有執行在所有放緩。任何建議?

而且,正好我如果任何人有疑問,對於X FPS,我計算MILLISECOND_PER_FRAME作爲

MILLISECOND_PER_FRAME = (int)(1000.0f/X); 

解決

好了,所以我解決了這個問題。如果您想要某個線程在特定的毫秒數內休眠,請使用Thread.sleep(millis);.該函數影響它正在運行的線程。現在我看到,當我把1 fps與25 fps相比時,它們有很大的不同。

感謝大家對這個問題的看法。

+1

你可以在下面回答你自己的問題。 – Reno

回答

0

乾杯,

雖然你已經解決了這個問題,看來你是從錯誤的一端做。最好是保持渲染速度並且只在特定的時間間隔更新應用程序狀態。這意味着沒有線程在睡覺,只是一個條件,看看是否有足夠的時間來完成更新。

這似乎是一個更清潔的解決方案。我不確定如果制動渲染線程會對手機產生什麼影響(因爲它可以與圖形硬件一起工作,實際上也可能會拖延一些其他(系統)線程)。不知道這是否是件好事。

另一方面,對於某些應用程序來說,不渲染任何東西可能是有意義的(但是通過立即從渲染函數返回將會更好地實現,而不用交換前後緩衝區 - 我不確定是否可以在Android上執行)。