2012-12-09 49 views
4

我正在写一个自动播放功能的应用程序,基本上就像一本故事书。我为每个活动(页面)设置了一个媒体播放器onCompletionListener,以便在叙述完成时开始下一个活动(页面)。有打开自动播放关闭(这样你就可以按照自己的节奏阅读)的选项...但关闭它导致活动--the当前page--“记住”以前onCompletionListener调用(如后退按钮使用导航回到先前的活动)。随后的活动(页面)工作正常......因为逻辑检查启动onCompletionListener使它不能执行。有没有办法取消onCompletionListener?

我也试着移动该逻辑检查onStart() [代替onCreate]为其中自动播放翻转占用整个屏幕,使得之前的活动(页)执行onStop()菜单。虽然此设置使onCompletionListener不再被执行......但它仍不会“取消”以前的onCompletionListener。注意:这只是一个活动(页面)以autoplay=on开始时的问题。

我也简单地尝试过super.recreate()这个特殊的活动,试图“重启”所有的东西(希望包括onCompletionListener)。然而,结果并不漂亮(活动消失,从不重新初始化)。

我不包括任何代码(我)这更是一个程序性问题。 1.可以将onCompletionListener“取消”。如果是这样,怎么样? 2.如果没有,(因为我是比较新的爪哇/机器人)是重新创建方法可接受的/有益的“复位”整个活动(以及onCompletionListener它里面)?

我针对API 11以上。任何想法/建设性的批评将不胜感激。

回答

0

如果你想取消以前设置的onCompletionListener,你可以简单地设置一个新的,不做任何事情。

+0

所以只有一个oCL为每个活动?我还没有找到这个完整的文档,但...所以我不完全理解oCL的“生命周期”,如果你愿意的话。在onDestroy之后,oCL是否被“杀死”了一个特定的活动?还是它仍然会在后台挥之不去? – user1848796

+0

1.是的,只有一个听众。如果你设置一个新的,它将覆盖前面的内容。 2.如果听者倾听死亡的物体,它将永远不会被称为:) – Rotem

+0

太棒了!感谢您的澄清......并为您耐心解决我的问题。在这一点上,我试图不要“承担”任何事情。 – user1848796

0

井为“取消”的方式,它是利用释放的方法。当你打开一个新页面时(活动),你应该考虑这样做。

+0

OK ......我认为你是在谈论释放的媒体播放器。我重置每个页面的媒体播放器以重新加载该页面的相应文件...但我并没有真正杀死它。我认为这将是一个更有效的方法,不太容易发生内存泄漏? – user1848796

+0

是的,我是。如果您不释放媒体播放器,则使用的内存将是所有媒体播放器的总和,并可能会导致电话崩溃。我认为在活动结束时逐页加载并释放它会更高效 – adarsh

+0

媒体播放器文档声明reset()会将其恢复到其未初始化状态。我认为释放了用于该特定媒体播放器的所有资源......这看起来是不好的假设。感谢您的反馈意见。 – user1848796

0

我这里还有一些可能的解决方案:

  1. 为的onDestroy,使用setOnCompletionListener(空)。

  2. 时所需的设置更改,还设置了全局标志(即也将在被创建的应用程序设置),并在监听事件,检查该标志。

+0

谢谢。 1.类似于Rotem的建议......我会试试看。我在做2.我只是没有把'null'看作oCL的目标。我会试一试。 – user1848796

相关问题