Будни юнитишника: сохраняйте глобальные ссылки на JNI объекты

Когда вы получили IntPtr на нативный Android объект, то GC может в какой-то момент почистить её (скорей всего, после выхода из локального скопа). Из-за того, что я одну ссылка не сохранил, дебажил код много часов, чтоб причину крашей найти.

Ещё хуже то, что стектрейс при краше никак не помогает.

Вот такой стектрейс я наблюдал:

Как видите, никак не помогает выявить проблему. В итоге ошибка оказалась в месте, где я кэширую ссылку на будущее.

Преобразовал её в глобальную, падать перестало.

Мораль: не забывайте преобразовывать локальные ссылки на нативные объекты в глобальные, чтоб GC их не почистил.

  Категории: Android, C#, java, Коддинг