gpt4 book ai didi

java - 服务在单次广播中触发数百次

转载 作者:行者123 更新时间:2023-12-01 10:43:09 25 4
gpt4 key购买 nike

我正在从 Activity 向服务发送广播:

Activity :

        Timber.d("SENDING REQUEST");
// Send broadcast to service to request GPS (this avoids concurrency issues with file collision)
Intent updateActivitiesRequest = new Intent(A_GPS.UPDATE_ACTIVITIES_REQUEST);
sendBroadcast(updateActivitiesRequest);

服务:

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
startService(intent);

_updateRequestReciever = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(TAG, "GOT IT");
// broadcastSavedActivityDataForToday();
}
};

IntentFilter intentFilter = new IntentFilter(A_GPS.UPDATE_ACTIVITIES_REQUEST);
registerReceiver(_updateRequestReciever, intentFilter);

return START_NOT_STICKY;
}

但是,当请求被触发一次时,我的服务中的 onReceive 会触发数百次触发:

D/A_GPS: SENDING REQUEST

D/S_GPS: GOT IT

D/S_GPS: GOT IT

D/S_GPS: GOT IT

D/S_GPS: GOT IT

...and hundreds more

它触发了很多次,事实上我的 logcat 甚至无法处理它,并且控制台中出现了一系列错误。当我尝试发送回复时遇到的一些错误是:

  1. 失败的交易绑定(bind)器(以及!!失败的交易绑定(bind)器!!)
  2. 发送 Intent {} android.os.DeadObjectException 广播结果失败
  3. 交易太大异常

显然,这是当我取消注释 broadcastSavedActivityDataForToday() 时它尝试发送回复的结果,结果收到了数百条回复。

您知道为什么我的服务中的广播接收器会因单个广播 Intent 而触发数百次吗?

最佳答案

两个原因:

  1. 您的服务正在通过 onStartCommand() 自行调用 startService()。这就是我们所说的“无限循环”。不要这样做。

  2. 您正在 onStartCommand() 中注册接收器,因此将为每个 startService() 调用注册一个接收器。在 onCreate() 中注册一次接收器。

关于java - 服务在单次广播中触发数百次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343441/

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