Я создал другой класс, в котором у меня есть функция выхода из системы:
fun logOut(context: Context) {
context.stopService(Intent(context, CheckNewMessages::class.java))
val intent = Intent(context, LoginScr::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP and
Intent.FLAG_ACTIVITY_NEW_TASK and
Intent.FLAG_ACTIVITY_NO_ANIMATION
context.startActivity(intent)
(context as Activity).finish()
}
, и, как вы можете видеть, я использую эту строку для завершения действия:
(context as Activity).finish()
Но он все еще жив и в результате у меня есть два или более одинаковых действия в моей системе. Я пробовал много способов, таких как создание переменной stati c в первом действии и использование этой переменной во втором для закрытия. Но моя деятельность остается в живых. Я также попытался использовать lauchmode в манифесте и некоторые другие способы. Может, кто-то знает, где я допустил ошибку?
ОБНОВЛЕНИЕ
Два места, откуда я звоню logOut()
. 1-й - интерфейс между адаптером RV и фрагментом:
override fun finish() {
APICallRequests.logOut(context!!)
activity!!.finishAffinity()
}
и 2-й в Interceptor
для запросов:
private fun updateAccessToken(context: Context) {
val sp = context.getSharedPreferences(Constants.SHARED_PREFS_STORAGE, 0)
synchronized(this) {
val tokensCall = accessTokenApi()
.getNewToken(ReqAccessToken(sp.getString("refresh_token", "")!!))
.execute()
if (tokensCall.isSuccessful) {
} else {
when (tokensCall.code()) {
500 -> {
val thread = object : Thread() {
override fun run() {
Looper.prepare()
Toast.makeText(cont, cont.getString(R.string.server_error_500), Toast.LENGTH_SHORT).show()
Looper.loop()
}
}
thread.start()
}
401 -> {
APICallRequests.logOut(context)
}
}
}
}
}