Я пытаюсь создать функцию в Kotlin
, которая принимает блок кода и выполняет его, если приложение находится на переднем плане, в противном случае сохраните его в переменной и выполните в следующий раз, когда приложение появится на переднем плане.
Что я делал до сих пор:
class MainActivity : AppCompatActivity() {
private var appInBackground = false
private var codeBlock: Any? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onResume() {
super.onResume()
appInBackground = false
if (codeBlock!=null)
performOperations { codeBlock }
}
override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)
appInBackground = true
}
fun performOperations(block: () -> Unit) {
if (appInBackground)
codeBlock = block
else {
block()
codeBlock=null
}
}
}
Я вызываю функцию как:
mainActivity.performOperations {
val fm=mainActivity.supportFragmentManager
for (i in 0 until fm.backStackEntryCount)
fm.popBackStackImmediate()
}
Проблема, с которой я столкнулся:
Если приложение находится на переднем плане, и я вызываю метод performOperations
, выполняется блок кода, переданный в качестве аргумента. Но если я сохраню блок кода в переменной и попытаюсь вызвать метод performOperations
для onResume
, блок кода не будет выполнен.
P.S .: В моем коде могут быть ошибки, потому что я новичок в функциях и лямбдах высшего порядка.