Android SDK dostarcza możliwość logowania różnych sytuacji zaistniałych w kodzie za pomocą klasy Log. Zrobiłem małego wrapera i w kasuroid logowanie jest możliwe za pomocą klasy Debug. A dlaczego tak? A po to, żeby za każdym razem nie wpisywać chociażby "taga" oraz mieć większą kontrolę nad formatem wypluwanych danych (i np. w prosty sposób zrobić logowanie do pliku, na serwer czy gdzie tam komu się podoba). Domyślnie logi można podejrzeć w LogCat:
Btw. klasa "Log" jest przykładem na to, jakim poczuciem humoru obdarzeni są programiści gugla :) Jedną z metod tej klasy jest... "wtf" :) Nie, nie. Nie jest to "What The Fuck?!", ale prawie równie wymowne "What a Terrible Failure" :)
Z pozostałych rzeczy.. Główne activity zmieniło nazwę na KasuroidActivity. KasuroidThread został również rozbudowany. Jest to klasa wątku, w którym odpalany jest core frameworka. Możliwe, że później KasuroidThread zostanie wchłonięty przez Core, ale na razie zostawiam to tak jak jest.
Aby wystartować framework należy w zasadzie utworzyć obiekt klasy KasuroidThread i wywołać metode proceed. Metoda ta inicjalizuje (poprzez Core) wszystkie moduły:
1 public int proceed() 2 { 3 int ret = RetCode.SUCCESS; 4 5 ret = Core.getInstance().init(surface, context); 6 if (ret != RetCode.SUCCESS) 7 { 8 Debug.err(this.getClass().getName(), "Core not initialized!"); 9 return ret; 10 } 11 12 setRunning(true); 13 start(); 14 15 return RetCode.SUCCESS; 16 }
Aby zakończyć pracę należy wywołać metodę shutDown:
1 public int shutDown() 2 { 3 // Shut down the core thread. 4 boolean retry = true; 5 setRunning(false); 6 while (retry) 7 { 8 try 9 { 10 this.join(); 11 retry = false; 12 } 13 catch (InterruptedException e) 14 { 15 Debug.err(this.getClass().getName(), e.toString()); 16 return RetCode.FAILURE; 17 } 18 } 19
20 int ret = Core.getInstance().term(); 21 if (ret != RetCode.SUCCESS) 22 { 23 Debug.err(this.getClass().getName(), "Core wasn't properly terminated!"); 24 } 25 26 return ret; 27 }
Główną pętlę całego frameworka zawiera metoda run wątku:
1 public void run() 2 { 3 while (isRunning) 4 { 5 Core.getInstance().runSlice(); 6 } 7 }
Jak widać nie robi ona praktycznie nic oprócz wołania metody runSlice z Corea. To właśnie w runSlice będą się dziać wszystkie magiczne aktualizacje sceny, fizyki i rysowanie po ekranie.
No comments:
Post a Comment