从父级杀死子级活动

时间:2021-04-14 17:14:18

标签: kotlin bluetooth-lowenergy

A. BC |。 |。 | 主要活动 带回调的蓝牙例程

MainActivity 对我有两个目的:

  1. 管理蓝牙 BLE 系统调用,包括在开始扫描时系统调用的“CallBack”函数:bleScanner.startScan(filters, scanSettings, scanCallback)
  2. 充当“交通警察”或“控制者”,用户可以看到 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 留在堆栈中。

我想有一种方法在回调之后从 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 个答案:

答案 0 :(得分:0)

  1. 检查 onNewIntent 是否适合您:

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

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

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

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