ArrayListにはいくつのエントリがありますか、かなり大きいようです。
私の理解では、onDraw()ですべてを描画することにOoMの問題はありませんが、それは本当に遅いですか?その場合、最もよく似た理由は、大量のdrawTextを呼び出していることです。これは非常に遅いです。基本的に、描画する文字列が10000個ある場合、システムはそれらのすべてを測定する必要があります。指定された文字列が大きなキャンバスに表示されるかどうかを判断すると、実際の描画部分も遅くなります。
すべてのテキストを描画するのにかかる時間をテストして、これが当てはまるかどうかを確認できます。
それが実際に当てはまる場合、最も簡単な方法は、各文字/数字をビットマップにマップすることです。アーティストにPNGファイルを作成させるか、onCreate(Bundle)または他の-Activity-creationメソッドごとに1回、ビットマップをString-to-Bitmap HashMapに配置し、呼び出す代わりに
canvas.drawText(bellNumber, xPad, mOriginY, paint);
あなたは次のようなものを呼びます
canvas.drawBitmap(hash.get(bellNumber), src, dst, paint); //remember to reuse src & dst
これにより、文字列関連の描画オーバーヘッドが完全にバイパスされ、onDraw操作がかなり高速になります。