ThreadPoolExecutor を調べていて、 Thread インスタンスの最大数はどんなものだろうと思ったので確認したところ、端末によって異なりますが1000個〜10000個程度でした。これを超えるとOutOfMemoryErrorが発生したり、最悪の場合いきなりクラッシュしたりします。 Executors.newCachedThreadPool() は ThreadPoolExecutor を生成するファクトリメソッドですが、スレッド生成の最大数が Integer.MAX_VALUE (つまり無制限)となっています。このexecutorによってスレッドを数百以上生成することはまずないとは思いますが、上限が定められていない以上うっかり端末の限界値を超えないとも限りません。Androidで Executors.newCachedThreadPool() を使うのはやめたほうがよさそう