Белый Антон, 2538

60 FPS have been achieved through various optimizations and taking advantage of automaton's cyclicity.

The latter is done by caching several rendered iterations until they loop (1) and then displaying them continuously (2). This, however, introduces bigger heap consumption (approx. 5 Mb now) and, on devices with low minimum heap size, it introduces notable lags during phase (1) due to dynamic heap reallocation.
So if this is not acceptable, one can revert commits 93037cd..b5c0dfc and use non-caching version from 62199db, which is able to render automaton's iterations with approx. 30-35 FPS.
I had to rename this method, because gradlew said that methods starting with "on..." can only be called by Android system handlers, not manually, and refused to compile.