android– 如何完成几个SingleInstance活动?

android– 如何完成几个SingleInstance活动?,第1张

概述我在launchModeSingleInstance中有几个活动.注销时我想完成所有活动并打开launchScreen.valintent=Intent(context,LauncherActivity::class.java)intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)intent.addFlags(Inte

我在launchMode SingleInstance中有几个活动.注销时我想完成所有活动并打开launchScreen.

val intent = Intent(context, LauncherActivity::class.java)intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_top)(context as AppCompatActivity).finishAffinity()context.startActivity(intent)

但是,如果我按回Launcher活动,我会转发到以前启动的具有singleInstance模式的活动

解决方法:

更新11/1/2018:

我已经测试了多种方法来处理它,例如事件传播,意图标记,计数活动实例等.有一些奇怪的场景,例如顺序启动多个singleInstance活动.在这种情况下,中间活动根本不启动(onCreate方法未被调用),按下后退按钮后,它们将被启动.因此,没有一种先前的方法有效!由于问题有点奇怪,我试图用一种奇怪的方式来解决它.

我们在名为logoutHandler的单个对象中维护注销状态.它与一个logoutAwareActivity类合作,该类由除LoginActivity之外的所有活动继承,因为它不应受注销机制的影响.发生注销时,会在logoutHandler中设置一个标志,直到logoutAwareActivity的最后一个子项完成,然后清除该标志.

这是一个实现:

logoutHandler:

import java.util.*object logoutHandler {    private var islogout = false    private var timerWatchDog: TimerWatchDog? = null    fun islogout() = islogout    fun onActivityDestroyed() {        if (islogout) {            timerWatchDog?.refresh(Runnable {                islogout = false                timerWatchDog = null            })        }    }    fun logout() {        islogout = true        timerWatchDog = TimerWatchDog(500)    }    private class TimerWatchDog(private val delay: Long) : Runnable {        private var timer: Timer? = null        private var runnable: Runnable? = null        fun refresh(runnable: Runnable) {            this.runnable = runnable            timer?.cancel()            val timerTask = object : TimerTask() {                overrIDe fun run() {                    Thread(this@TimerWatchDog).start()                }            }            timer = Timer()            timer?.schedule(timerTask, delay)        }        overrIDe fun run() {            runnable?.run()        }    }}

logoutAwareActivity:

import androID.support.v7.app.AppCompatActivityabstract class logoutAwareActivity : AppCompatActivity() {    overrIDe fun onResume() {        super.onResume()        if (logoutHandler.islogout()) {            finish()        }    }    overrIDe fun onDestroy() {        super.onDestroy()        LoginHandler.onActivityDestroyed()    }}

具体活动:

class ActivityA : logoutAwareActivity() {    // ...}

另一个具体活动:

class ActivityB : logoutAwareActivity() {    // ...}

您的退出功能:

fun logout() {    val intent = Intent(context, LoginActivity::class.java)    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)    logoutHandler.logout()    context.startActivity(intent)}

视觉结果:

所有MainActivity,ActivityA,ActivityB和ActivityC都是单个实例.

按后退按钮在活动之间移动:

转到LoginActivity然后按下后退按钮:

总结

以上是内存溢出为你收集整理的android – 如何完成几个SingleInstance活动?全部内容,希望文章能够帮你解决android – 如何完成几个SingleInstance活动?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存