Android 广播接收者太多的实例呼叫广播者;实例=2;极限=1

Android 广播接收者太多的实例呼叫广播者;实例=2;极限=1,android,broadcastreceiver,android-service,phone-state-listener,Android,Broadcastreceiver,Android Service,Phone State Listener,我正在构建一个应用程序,每次通话时启动服务,第一次创建通话时,广播接收器启动服务,一切正常 但问题是:再次运行拨号程序后,LogCat中出现以下错误: 10-30 10:10:38.674: E/StrictMode(171): class com.android.phone.OutgoingCallBroadcaster; instances=2; limit=1 我已尝试通过在onReceive结束时调用此命令来解决此问题: this.abortBroadcast(); 这会删除错误,但

我正在构建一个应用程序,每次通话时启动服务,第一次创建通话时,广播接收器启动服务,一切正常

但问题是:再次运行拨号程序后,LogCat中出现以下错误:

10-30 10:10:38.674: E/StrictMode(171): class com.android.phone.OutgoingCallBroadcaster; instances=2; limit=1
我已尝试通过在onReceive结束时调用此命令来解决此问题:

this.abortBroadcast();
这会删除错误,但也会停止服务再次运行,有人能帮我解决这个问题吗,或者有人经历过这种情况吗

这是接收器:

   public class OutgoingCallReceiver extends BroadcastReceiver {
    public OutgoingCallReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {


        // Extract phone number reformatted by previous receivers
        String phoneNumber = getResultData();
        if (phoneNumber == null) {
            // No reformatted number, use the original
            phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        }
        Intent in = new Intent(context, OutgoingCallHandler.class);

        context.startService(in);
        OutgoingCallHandler.phonenumber = phoneNumber;


    }
}
以下是舱单中的声明:

<service
    android:name=".IncomingCallHandler"
    android:label="@string/title_activity_main" >
</service>

<receiver android:name=".OutgoingCallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

所有的帮助都很好

  • 不要调用
    abortBroadcast()
    ,因为是。它有一些后处理和清理工作要做

  • 您的
    context.startService(in)OutgoingCallHandler
    仍处于活动状态,则code>将不会启动服务的另一个实例。添加一个要检查的项目。并且,看看是否可以避免保存对
    OutgoingCallHandler.phonenumber=phonenumber的引用从您的
    onReceive


我通过在服务完成后停止服务来解决问题,