微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从父级杀死子级活动

如何解决从父级杀死子级活动

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. 检查 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。