При возобновлении Activity приложение крашится

Есть MapActivity в которой по нажатию кнопки происходит переход к activity CreateOrder из которой пользователь попадает в CreateOrderStep2 а уже из нее возвращается в MapActivity так же по нажатию кнопки, но в процессе перехода происходит краш приложения.

Переход к CreateOrder из MapActivity:

startActivity(Intent(this, CreateOrder::class.java))

Переход к CreateOrderStep2:

startActivity(Intent(this, CreateOrderStep2::class.java))

Переход к MapActivity из CreateOrderStep2:

startActivity(Intent(this, MapActivity::class.java)) // На этом моменте вылетает

Код MapActivity:


import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import com.yandex.mapkit.Animation
import com.yandex.mapkit.MapKitFactory
import com.yandex.mapkit.geometry.Point
import com.yandex.mapkit.map.CameraPosition
import com.yandex.mapkit.mapview.MapView
import android.content.pm.PackageManager
import android.view.View
import android.widget.Button
import android.widget.Toast
import com.yandex.mapkit.MapKit
import com.yandex.mapkit.layers.ObjectEvent
import com.yandex.mapkit.user_location.UserLocationObjectListener
import com.yandex.mapkit.user_location.UserLocationView

class MapActivity : AppCompatActivity(), UserLocationObjectListener {

    private lateinit var mapview: MapView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        MapKitFactory.setApiKey("API") //init yandexmap
        MapKitFactory.initialize(this)
        setContentView(R.layout.activity_map) // init yandexmap
        mapview = findViewById(R.id.yandexMap) // init yandexmap
        mapview.map.move( // camera settings
            CameraPosition(
                Point(43.129416, 131.918356),
                13.0f, 0.0f, 0.0f
            ), Animation(Animation.Type.SMOOTH, 8f), null
        )
        requestLocationPermission() // request allow geo

        val mapkit = MapKitFactory.getInstance() // create user location
        val userLocation = mapkit.createUserLocationLayer(mapview.mapWindow) // create user location
        userLocation.isVisible = true // create user location
    }

    private fun requestLocationPermission() {
        if (ActivityCompat.checkSelfPermission(
                this,
                android.Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                android.Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) { // Если нет доступа к гео
            ActivityCompat.requestPermissions(
                this,
                arrayOf(
                    android.Manifest.permission.ACCESS_FINE_LOCATION,
                    android.Manifest.permission.ACCESS_COARSE_LOCATION
                ),
                0
            )
            return
        }
    }

    override fun onStop() {
        mapview.onStop()
        MapKitFactory.getInstance().onStop()
        super.onStop()
    }

    override fun onStart() {
        mapview.onStart()
        MapKitFactory.getInstance().onStart()
        super.onStart()
    }

    override fun onObjectAdded(p0: UserLocationView) {
        TODO("Not yet implemented")
    }

    override fun onObjectRemoved(p0: UserLocationView) {
        TODO("Not yet implemented")
    }

    override fun onObjectUpdated(p0: UserLocationView, p1: ObjectEvent) {
        TODO("Not yet implemented")
    }


    fun onClickNewOrder(view: View) {
        startActivity(Intent(this, CreateOrder::class.java))
    }
}

Ответы (1 шт):

Автор решения: Timofey

Решил так:

Вынес инициализацию API:

object MapKitInitializer {
    private var initialized = false

    fun initializeMapKit(context: Context) {
        if (!initialized) {
            MapKitFactory.setApiKey("API_KEY")
            MapKitFactory.initialize(context)
            initialized = true
        }
    }
}

И в OnCreate() просто вызызвал:

MapKitInitializer.initializeMapKit(this) //init yandexmap

→ Ссылка