Существует несколько вариантов сохранения объектов Opentok в цикле перезапуска активности.
Одной из опций может быть сохранение экземпляров в объекте, жизненный цикл которого отличается от действия.Вы также можете использовать статический экземпляр внутри Activity.Взгляните на этот пример Kotlin, используя сопутствующие объекты:
class OpenTokState {
lateinit var s: Session
lateinit var p: Publisher
var initialized = false
}
class MainActivity : AppCompatActivity() {
val API_KEY = ".."
val TOKEN = "..."
val SESSION_ID = "..."
companion object {
var opentok = OpenTokState()
}
override fun onCreate(savedInstanceState: Bundle?) {
...
if (!opentok.initialized) {
opentok.initialized = true
opentok.s = Session.Builder(this, API_KEY, SESSION_ID).build()
...
}
}
Сопутствующий объект является статическим экземпляром, который, как статическое средство, будет одинаковым во всех MainActivity
экземплярах.
Обратите внимание, что если вы следуете этому подходу, вам нужно принять одно важное соображение: вам нужно , чтобы удалить представление издателя / подписчика у его родителей в методе действия onDestroy
и снова добавить их представления вновые экземпляры контейнеров.
Существует еще одна альтернатива, но, как говорится в документации Android, это не предпочтительный способ.Этот другой метод - , обрабатывающий изменения конфигурации самостоятельно .В этом случае вы можете добавить android:configChanges="orientation"
к объявлению своей активности в манифесте приложения, и тогда действие не будет перезапущено при изменении ориентации, поэтому экземпляры останутся живыми.
Однако вам придется самостоятельно обрабатывать оставшиеся изменения (например, изменения макета), что, вероятно, будет непростой задачей.