gpt4 book ai didi

android - 为什么我的 BroadcastReceiver 不调用其他方法?

转载 作者:行者123 更新时间:2023-11-29 18:16:01 25 4
gpt4 key购买 nike

我有一个可以成功捕获广播的 BroadcastReceiver,但是如果我尝试从它调用另一个方法,它并不总是有效。这是我的设置:

private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (working == true) {
//toast to make sure we got here
doWork();
}
}
}

if 中的 toast 被调用,但 doWork 没有执行。有没有人处理过类似的问题?

最佳答案

Broadcast 接收器与您的应用程序没有相同的上下文和生命周期,您不能在其中做很多正常的事情。您应该做的就是处理事件并尽快返回。换句话说,启动一个服务,或者通知用户。

发件人:http://developer.android.com/reference/android/content/BroadcastReceiver.html

BroadcastReceiver 对象仅在调用 onReceive(Context, Intent) 期间有效。一旦您的代码从此函数返回,系统就会认为该对象已完成并且不再处于 Activity 状态。

这对您在 onReceive(Context, Intent) 实现中可以做什么有重要影响:任何需要异步操作的东西都不可用,因为您需要从函数返回来处理异步操作,但在那个时候BroadcastReceiver 不再处于 Activity 状态,因此系统可以在异步操作完成之前自由终止其进程。

特别是,您不能在 BroadcastReceiver 中显示对话框或绑定(bind)到服务。对于前者,您应该改用 NotificationManager API。对于后者,您可以使用 Context.startService() 向服务发送命令。

关于android - 为什么我的 BroadcastReceiver 不调用其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com