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