Я полагаю, что одной из возможных причин является то, что в долгосрочном методе JNI виртуальная машина прерывается при исчерпании локальных эталонных слотов для вызова метода (обычно 512 слотов в Android).
Поскольку функции FindClass () и NewStringUTF () будут выделять локальные ссылки, если вы долго находитесь в методе JNI, ВМ не знает, следует ли повторно использовать конкретную локальную ссылку или нет. Поэтому вы должны явно вызывать DeleteLocalRef (), чтобы освободить полученные локальные ссылки, когда они больше не нужны. Если вы этого не сделаете, локальные ссылки «зомби» будут занимать слоты в ВМ, и ВМ прерывается, когда заканчиваются все локальные ссылочные слоты.
В краткосрочном методе JNI это может не быть проблемой, поскольку все локальные ссылки будут перезаписаны при выходе из метода JNI.