小编Dou*_*ler的帖子

Android:即使我调用unregisterReceiver,也会抛出泄漏的IntentReceiver异常

我不明白为什么我在按下后退按钮时会遇到此异常.我在onCreate方法中注册了IntentReceiver,它应该在onPause方法中取消注册.我在onPause方法内部的Log.w()调用让我相信正在调用unregisterReceiver()方法,但我仍然得到这个异常.

有什么想法吗?

private PlayerReceiver playerReceiver;

public void onCreate(Bundle savedInstanceState) {
 ...
     IntentFilter playerFilter;     
     playerReceiver = new PlayerReceiver();
     playerFilter = new IntentFilter(PlayerService.BUFFERING_FAILURE);
     playerFilter.addAction(PlayerService.BUFFERING_SUCCESS);
     registerReceiver(playerReceiver, playerFilter);
 ...
}

protected void onPause() {
 ...
     if (playerReceiver != null){
         unregisterReceiver(playerReceiver);
         Log.w(TAG, "playerReceiver has been unregistered");
         playerReceiver = null;
     }
 ...
}

public class PlayerReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(PlayerService.BUFFERING_FAILURE)){
            setListenButton(false);
        }
        closePlayDialog();
    }
}
Run Code Online (Sandbox Code Playgroud)

LogCat输出

08-26 11:44:28.646: WARN/WWOZMain(1058): playerReceiver has been unregistered    
08-26 11:44:29.476: ERROR/ActivityThread(1058): Activity org.wwoz.WWOZMain …
Run Code Online (Sandbox Code Playgroud)

android exception

14
推荐指数
2
解决办法
4万
查看次数

活动开始时收到Intent.ACTION_HEADSET_PLUG

我正在尝试暂停拔下耳机时播放的音乐.

我创建了一个BroadcastReceiver,它侦听ACTION_HEADSET_PLUG意图,并在状态 extra为0(对于unplugged)时对它们进行操作.我的问题是,每当活动开始时,我的BroadcastReceiver都会收到ACTION_HEADSET_PLUG意图.这不是我期望的行为.我希望只有在插入耳机或拔下耳机时才会触发Intent.

有没有理由在使用该IntentFilter注册接收器后立即捕获ACTION_HEADSET_PLUG Intent?有没有明确的方法可以解决这个问题?

我认为,由于默认音乐播放器在拔下耳机时实现了类似的功能,因此可以实现.

我错过了什么?

这是注册码

registerReceiver(new HeadsetConnectionReceiver(), 
                 new IntentFilter(Intent.ACTION_HEADSET_PLUG));
Run Code Online (Sandbox Code Playgroud)

这是HeadsetConnectionReceiver的定义

public class HeadsetConnectionReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        Log.w(TAG, "ACTION_HEADSET_PLUG Intent received");
    }

}
Run Code Online (Sandbox Code Playgroud)

android

13
推荐指数
1
解决办法
2万
查看次数

HTML5视频"进度"事件不再按预期的方式触发Chrome

我一直在为html5视频开发一套基于画布的视频控件.直到最近,一切都运作良好.一旦视频开始缓冲,我的'progress'事件的javascript事件监听器将更新画布擦除器.

最近,我升级了我的操作系统,最新版本的Chrome(15.0.874.106)似乎没有正确触发进度事件.它不会在视频完全加载之前触发,而是在很短的时间后停止发射.Firefox或以前版本的Chrome(12)中不存在此行为.

有什么东西我不见了吗?

这是我正在使用的测试代码:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<video id="main-player" preload="auto" controls>
<source src='video/atest.mp4' type='video/mp4' />
<source src='video/atest.webm' type='video/webm' />
<source src='video/atest.ogv' type='video/ogg' />
</video>

<script>
var player = document.getElementById('main-player');
player.addEventListener('progress', function(){
    console.log('buffering: [duration: '+player.duration+'] [buffered: '+player.buffered.end(0)+']');
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

即使我完全删除了我的JS处理程序并且仅观察视频标记提供的擦除器,缓冲也会提前停止.

google-chrome javascript-events html5-video

9
推荐指数
0
解决办法
1242
查看次数