【问题标题】:How to force kill Picture and Picture activity on cross icon click?如何在十字图标单击时强制杀死图片和图片活动?
【发布时间】:2021-05-24 19:35:18
【问题描述】:

我试图在图片和图片模式激活后从任务中终止活动,到目前为止我尝试了finish()finishAffinity()onBackPressed(),以编程方式设置excludeFromRecent,但活动仍然存在于后台..

当我们点击那个十字图标时,我们可以在Google Maps 中看到相同的行为。应用程序仍然存在于后台,但我需要残忍地杀死它:)

    <activity
        android:name=".PipActivity"
        android:launchMode="singleInstance"
        android:supportsPictureInPicture="true"
        android:resizeableActivity="true"
        android:taskAffinity=".PipAffinity"
        android:configChanges="orientation|smallestScreenSize|screenLayout|screenSize"
        android:windowSoftInputMode="adjustPan|stateHidden"/>

这就是我触发意图的方式:

        Intent(context, PipActivity::class.java)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))

重要提示:当这个活动不去PiP mode 时,一切都会按预期工作,当我需要它时,活动会正常终止!

当我点击这个十字图标时:

pipActivity 中的 onStop 被调用:

override fun onStop() {
        cleanView()
        finish()
        finishAffinity()
        setExcludeRecentToKillActivity()
}

private fun setExcludeRecentToKillActivity() {
    val am = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    val tasks = am.appTasks
    if (tasks != null && tasks.size > 0) {
        tasks[0].setExcludeFromRecents(true)
    }
}

此时 UI 已清理并且连接中断。但是系统仍然在后台保存任务,当我点击它时它会自行重启。

我不想要这个。右边的任务是不应该处于活动状态的已关闭 PiP 活动。我想杀了它。有可能吗?

【问题讨论】:

    标签: android android-activity android-task picture-in-picture android-picture-in-picture


    【解决方案1】:

    所以实际上我找到了解决方案。 finish() 必须更改为 finishAndRemoveTask() 并且任务将在后台正确关闭。所以setExcludeRecentToKillActivity() 不再需要了。

    override fun onStop() {
       cleanView()
       finishAndRemoveTask()
       finishAffinity()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多