package Ġcom . four teen rows . p 2 pcs . activities . info . fl appy ĊĊ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . view . Surface Holder Ċ Ċ class ĠMain Thread ( private Ġval Ġsurface Holder : ĠSurface Holder , Ġprivate Ġval Ġgame View : ĠGame View ) Ġ: ĠThread () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġrunning : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġtarget FPS Ġ= Ġ 3 0 ĊĠĠĠ Ġprivate Ġvar Ġaverage FPS : ĠDouble Ġ= Ġ 0 . toDouble () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcanvas : ĠCanvas ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar ĠstartTime : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġtime Millis : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġwait Time : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Time : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġframe Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġtarget Time Ġ= Ġ( 1 0 0 0 Ġ/ Ġtarget FPS ). to Long () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Ġ= Ġthis . surface Holder . lock Canvas () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( surface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . game View . update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . game View . draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( canvas Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Holder . unlock Canvas And Post ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Millis Ġ= Ġ( System . nano Time () Ġ- ĠstartTime ) Ġ/ Ġ 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwait Time Ġ= Ġtarget Time Ġ- Ġtime Millis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep ( wait Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time Ġ+= ĠSystem . nano Time () Ġ- ĠstartTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame Count Ġ== Ġtarget FPS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage FPS Ġ= Ġ( 1 0 0 0 Ġ/ Ġ( total Time Ġ/ Ġframe Count Ġ/ Ġ 1 0 0 0 0 0 0 )). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Running ( isRunning : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġis Running ĊĠĠĠ Ġ} Ċ }