Java ANDROID:广播接收器持续接收相同的消息

Java ANDROID:广播接收器持续接收相同的消息,java,android,android-intent,Java,Android,Android Intent,我在安卓系统中制作了一个应用程序,通过文件列表创建TAR文件 在main活动中,我向一个服务发送一个文件列表:TarCreatorService。 TarCreatorService创建TAR文件并通过interna广播通知MainActivity。 这个通知收到了很多次,我不知道为什么 我有断点,所有的意图都被发送,它们只被触发一次,但是来自TarCreatorService和MainActivity的消息被MainActivity的广播接收器持续接收 代码如下: main活动:向TarCre

我在安卓系统中制作了一个应用程序,通过文件列表创建TAR文件

在main活动中,我向一个服务发送一个文件列表:TarCreatorService。 TarCreatorService创建TAR文件并通过interna广播通知MainActivity。 这个通知收到了很多次,我不知道为什么

我有断点,所有的意图都被发送,它们只被触发一次,但是来自TarCreatorService和MainActivity的消息被MainActivity的广播接收器持续接收

代码如下:

main活动:向TarCreatorService发送意图

private void Tar(List<File> files,String EID)
    {
        Intent i=new Intent(this,TarCreatorService.class);
        i.setAction(TarCreatorService.ACTION_TAR_FILE_LIST);
        i.putExtra(TarCreatorService.EXTRA_SOURCE, (Serializable)Utils.getDtnBoxStorageDir());
        i.putExtra(TarCreatorService.EXTRA_SOURCE_FILES, (Serializable)files);
        i.putExtra(TarCreatorService.EXTRA_DESTINATION, (Serializable)this.getFilesDir());
        i.putExtra(FileHandleService.EXTRA_LOCAL_BROADCAST_DESYNC_FILES_EID, EID);
        startService(i);
    }
后一段代码被无限触发

我还在onResume()中注册BroadcastReceiver,并在onDestroy()中注销


我真的不知道如何解决这个问题:在测试这个应用程序时,我注意到我在第二次尝试创建TAR文件时才发现这个错误…再次:更多的测试和调试让我明白问题出在LocalBroadcastManager上:第一次我从服务向MainActivity发送意图时,该意图被接收一次。第二次收到两次,第三次收到三次,以此类推。。。所以我仍然很困惑,但我希望这能帮助你。。。帮帮我:)你找到这个问题的解决办法了吗?我相信我也有同样的问题
    public TarCreatorService() {super(TAG);}


@Override
protected void onHandleIntent(Intent intent) {


    if(ACTION_TAR_FILE_LIST.equals(intent.getAction()))
    {
        String EID = intent.getStringExtra(FileHandleService.EXTRA_LOCAL_BROADCAST_DESYNC_FILES_EID);

        List<File> sourceFiles = (List<File>)intent.getSerializableExtra(EXTRA_SOURCE_FILES);
        File source = (File)intent.getSerializableExtra(EXTRA_SOURCE);
        File destination = (File)intent.getSerializableExtra(EXTRA_DESTINATION);
        File tar= null;
        Intent i =new Intent(ACTION_LOCAL_BROADCAST_TARCREATORSERVICE);
        try{
            tar=TAR.PackFiles(sourceFiles,source, destination);
            i.putExtra(EXTRA_LOCAL_BROADCAST_WHAT, LOCAL_BROADCAST_TAR);
            i.putExtra(EXTRA_LOCAL_BROADCAST_TAR, (Serializable)tar);
            i.putExtra(FileHandleService.EXTRA_LOCAL_BROADCAST_DESYNC_FILES_EID,EID);
            LocalBroadcastManager.getInstance(this).sendBroadcast(i);
        }
        catch(Exception e)
        {
            i.putExtra(FileHandleService.EXTRA_LOCAL_BROADCAST_DESYNC_FILES_EID,EID);
            i.putExtra(EXTRA_LOCAL_BROADCAST_WHAT, LOCAL_BROADCAST_TAR_ERROR);
            i.putExtra(EXTRA_LOCAL_BROADCAST_TAR_ERROR, (Serializable)e);
            LocalBroadcastManager.getInstance(this).sendBroadcast(i);
        };
    }

}
private BroadcastReceiver mBroadcastReceiver= new BroadcastReceiver() {

...

else if(TarCreatorService.ACTION_LOCAL_BROADCAST_TARCREATORSERVICE.equals(intent.getAction()) && intent.hasExtra(TarCreatorService.EXTRA_LOCAL_BROADCAST_WHAT))
                switch(intent.getIntExtra(TarCreatorService.EXTRA_LOCAL_BROADCAST_WHAT, -1))
                {
                    case TarCreatorService.LOCAL_BROADCAST_TAR :
                        String EID= intent.getStringExtra(FileHandleService.EXTRA_LOCAL_BROADCAST_DESYNC_FILES_EID);
                        File tar= (File)intent.getSerializableExtra(TarCreatorService.EXTRA_LOCAL_BROADCAST_TAR);
                        SpawnMessage(tar.getAbsolutePath());




                        break;
                    case TarCreatorService.LOCAL_BROADCAST_TAR_ERROR :
                        Exception e=(Exception)intent.getSerializableExtra(TarCreatorService.EXTRA_LOCAL_BROADCAST_TAR_ERROR);
                        SpawnMessage(e.toString());
                        break;
                }
}