问题描述
A. BC |。 |。 | 主要活动 带回调的蓝牙例程
MainActivity 对我有两个目的:
- 管理蓝牙 BLE 系统调用,包括在开始扫描时系统调用的“CallBack”函数:bleScanner.startScan(filters,scanSettings,scanCallback)
- 充当“交通警察”或“控制者”,用户可以看到 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 没有成功。
我希望能帮助您解决这个问题。
解决方法
- 检查 onNewIntent 是否适合您:
https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent)
问题是活动应该是特定类型。您还需要知道哪个是活动的才能调用它。
- 所以也许您可以使用在 A、B、C 活动中注册的 BroadcastReceiver 来实现。您可以从 MainActivity 发送广播,它上面的任何活动都可以自行完成: