Androidで現在地の位置情報を取得し、Realmに保存する処理を書いています。
現在地の情報はLocationServices.FusedLocationApi.requestLocationUpdatesを利用し、PendingIntentでServiceを呼び出し、そこで位置情報を取得しています。

そのIntentService#onHandleIntentの中でRealm.getDefaultInstance()を何度も呼んでいるとクラッシュしてしまいます。

Serviceの処理

class LocationBackgroundService : IntentService("LocationBackgroundService") {

    override fun onHandleIntent(intent: Intent?) {
        intent ?: return
        if(!intent.extras.containsKey(FusedLocationProviderApi.KEY_LOCATION_CHANGED)){
            return
        }

        val l = intent.extras.get(FusedLocationProviderApi.KEY_LOCATION_CHANGED) as Location
        Realm.getDefaultInstance().executeTransaction { realm ->
            realm.createObject(PathRealm::class.java).apply {
                date = Date()
                latitude = l.latitude
                longitude = l.longitude
            }
        }
        RxBus.send(LocationUpdateEvent(l))
    }
}

トレース

E/UncaughtException: io.realm.exceptions.RealmError: Unrecoverable error. Too many open files in io_realm_internal_SharedGroup.cpp line 113
    at io.realm.internal.SharedGroup.createNativeWithImplicitTransactions(Native Method)
    at io.realm.internal.SharedGroup.openSharedGroupOrFail(SharedGroup.java:95)
    at io.realm.internal.SharedGroup.<init>(SharedGroup.java:74)
    at io.realm.internal.SharedGroupManager.<init>(SharedGroupManager.java:49)
    at io.realm.BaseRealm.<init>(BaseRealm.java:81)
    at io.realm.Realm.<init>(Realm.java:140)
    at io.realm.Realm.createAndValidate(Realm.java:240)
    at io.realm.Realm.createInstance(Realm.java:220)
    at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:126)
    at io.realm.Realm.getDefaultInstance(Realm.java:166)
    at jp.shikajiro.hogehoge.services.LocationBackgroundService.onHandleIntent(LocationBackgroundService.kt:29)
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.os.HandlerThread.run(HandlerThread.java:61)