从父级杀死子级 Activity

Kill Child Activity from parent

一个。公元前 |。 |。 | 主要Activity 带有回调的蓝牙例程

MainActivity 对我有两个用途:

  1. 管理蓝牙 BLE 系统调用,包括系统在扫描开始时调用的“回调”函数:bleScanner.startScan(filters, scanSettings, scanCallback)
  2. 充当“交通警察”或“管制员”,activity 用户看到的是 A、B 或 C。

A、B、C 总是从 MainActivity 开始,类似于:

    startActivityForResult <Act A> (1)

A、B、C 总是以这样的方式结束:

setResult(9996, 意图) 完成()

而且A、B、C从未同时居住

因此,假设 A 处于活动状态,并且 TextView 填充了在 CallBack 中获得的数据,并且每当有新数据进入时都需要刷新。进出 A、B、C 的一切都很好,直到发生 CallBack。系统立即跳转到MainActivity中的CallBack方法,没有正常的生命周期调用(onPause、onExit等),A留在栈中。

我希望有一种方法可以在 CallBack 之后从 MainActivity 中杀死 A 并重新开始。我尝试了各种方法,例如:

((Activity) Class.forName(className).newInstance()).finish();

试图通过以下方式获得最高分:

        val am = this.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val taskInfo = am.getRunningTasks(1)
        val componentInfo = taskInfo[0].topActivity
        val Actvity_Name = taskInfo[0].topActivity?.className
        val PKG_Name = componentInfo?.packageName

然后尝试用各种技术杀死Activity_Name,但未成功。

非常感谢能帮助解决这个问题。

  1. 检查 onNewIntent 是否适合您:

https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent)

问题是 activity 应该是特定类型。您还需要知道哪个是活动的才能调用它。

  1. 所以也许您可以使用在 A、B、C 活动中注册的 BroadcastReceiver 来完成。您可以从 MainActivity 发送广播,并且它上面的任何 activity 处于活动状态,它都可以自行完成:

https://developer.android.com/guide/components/broadcasts