Реализуют ли объекты Scala перезагрузку активности на Android?

Я пишу приложение для Android в Scala, и я не смог найти четкого ответа на этот вопрос.

Мое приложение содержит объект с кучей статических данных, определенных в vals. Данные включают экземпляры классов.

Мой вопрос: что происходит с моим объектом, когда Android решает убить эту активность, а затем перезапустит ее? Я понимаю, что объекты в Scala могут использоваться для достижения аналогичной цели для статических значений в Java, но на самом деле не реализованы таким образом в сгенерированном байт-коде. Знает ли Android, чтобы повторно инициализировать мой объект, когда он перезапускает активность? Есть ли обстоятельства, когда это не будет сделано, или где я должен быть осторожен?

Если ответ на вышеизложенное «все в порядке», я понимаю, что объект, состоящий из изменчивых данных, будет совсем другим. В этом случае я уверен, что мне нужно будет явно сохранить / восстановить такие объекты, чтобы сохранить состояние. Но, как это ни странно, приходится сохранять / восстанавливать данные, которые всегда одинаковы и жестко связаны с самим APK.

Короче говоря, объекты переводится в одиночные, а один экземпляр хранится в статическом конечном поле. Поэтому объекты будут повторно инициализированы, и вам понадобится сериализация для восстановления одних и тех же данных для изменяемых объектов.

Программирование в Scala (от Odersky и др.), Глава 31, объясняет, как использовать декомпилятор для получения необходимого вам ответа – это очень просто.

В принципе, данный объект выглядит следующим образом:

 object App { def main(args: Array[String]) { println("Hello, world!") } } 

Он будет переведен в класс с именем App$ реализующий одноэлементный шаблон. В частности, экземпляр singleton содержится в поле, определяемом как public static final App$ MODULE$ = new App$(); , И методы определяются как методы экземпляра. javap App$ может использоваться для подтверждения объявления поля – возможно, jad может декомпилировать и исходный код. Если класс товарищей не определен, Scala также определит класс с именем App содержащий соответствующие статические конечные методы для вызова с Java. Таким образом, вы получаете метод App.main с правильной подписью и можете вызывать scala App , которое, в свою очередь, вызывает java App с App.main дополнительными библиотеками.