当另一个活动处于画中画模式时,有啥方法可以杀死一个活动?

Posted

技术标签:

【中文标题】当另一个活动处于画中画模式时,有啥方法可以杀死一个活动?【英文标题】:Is there any way to kill an activity when its in picture-in-picture mode from another activity?当另一个活动处于画中画模式时,有什么方法可以杀死一个活动? 【发布时间】:2021-06-10 09:23:58 【问题描述】:

我有两个活动 ActivityAActivityB(这个启用了 pip 模式) 当 ActivityB 处于点子模式时,ActivityA 现在来到前台我想从 ActivityA 完成/销毁/杀死 ActivityB strong> 有什么办法吗?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) 
        val supportsPIP = context!!.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
       
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) 
            if (supportsPIP) 
                enterPictureInPictureMode(mPictureInPictureParamsBuilder!!.build())
            
        

    

【问题讨论】:

到目前为止必须尝试什么来终止活动? 使用 LocalBroadcastManager 确实解决了这个问题 【参考方案1】:

在检查了这个答案https://***.com/a/56896347/13373099 之后,我意识到我所要做的就是使用 LocalBroadcastManager 如果有人在执行此操作时遇到问题,这就是我所做的

活动B中 私有 val mReceiver = 对象:BroadcastReceiver()

    override fun onReceive(context: Context, intent: Intent?) 
    intent?.let  intent ->
            if (intent.action == "FINISH_ACTIVITY") 
                
                finish(); // finish/kill activity also destroys the pip
                
            
    
    
    

现在注册监听器

    LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,  IntentFilter("FINISH_ACTIVITY));

ActivityA

只需发送带有意图操作“完成活动”的广播

 val intent = Intent("FINISH_ACTIVITY")
 LocalBroadcastManager.getInstance(this).sendBroadcast(intent)

【讨论】:

【参考方案2】:

另一种方法是将 Activity 的引用保存在单例中,当你想杀死它时,你调用 finish() 并再次将引用设置为 null。

【讨论】:

以上是关于当另一个活动处于画中画模式时,有啥方法可以杀死一个活动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在父进程被杀死/完成时保持子进程处于活动状态(在 Windows 中)

Android画中画模式,打开我的app的另一个activity

当另一个更改客户端时,Telerik RadGrid设置单元格值

如何以编程方式关闭画中画

Android O ——— 画中画模式(PIP)初步使用总结

当应用程序被杀死(非活动)时,点击 Firebase 通知不起作用