BroadcastReceiver被杀

时间:2011-06-07 10:47:41

标签: android broadcastreceiver

我有一个小部件,只是使用服务来更新小部件的RemoteViews的外观。该服务基于由不同的已注册BroadcastReceiver提供的过滤器启动。当满足其中一个条件时,调用我的BroadcastReceiver的onReceive()并启动我的服务。该服务运行然后自行停止。这很有用。但是,过了一段时间,就好像BroadcastReceiver被杀了一样。我已经在日志中看到我的进程已经死亡,并且它在5000毫秒内重新启动我的服务。这很好,但问题是我的BroadcastReceiver实际上是基于我订阅的事件来控制服务的启动。没有它,我的服务不会在这些事件发生时启动,例如用户的屏幕上。知道为什么会这样吗?为什么当没有调用unRegister()时,BroadcastReceiver会停止接收事件?我不希望我的服务一直在运行。我怀疑如果我将服务本身用作BroadcastReceiver会发生同样的行为。谢谢你的帮助。

@Override
public void onReceive(Context context, Intent intent)
{
    try
    {
        Log.i(TAG, "Received Broadcast: " + intent.getAction());
        Bundle bundle = intent.getExtras();
        context.startService(new Intent(
            com.mypkg.services.UpdateService.ACTION_UPDATE));
        Log.i(TAG, "Service start complete.");
    }
    catch(Throwable t)
    {
        JLog.e(TAG, "An occurred during onReceive(): ", t);
    }
}

1 个答案:

答案 0 :(得分:1)

您的应用程序崩溃,您需要在日志中找到崩溃转储以了解有关它的更多信息。

您可以通过首先不需要registerReceiver()来使广播接收器免疫 - 而不是以编程方式声明接收器,在AndroidManifest中声明它,以及适当的intent过滤器来定义广播希望收到。