Android 有没有办法取消onCompletionListener?

Android 有没有办法取消onCompletionListener?,android,Android,我正在编写一个具有自动播放功能的应用程序,基本上就像一本故事书。我为每个活动(页面)设置了一个媒体播放器onCompletionListener,以便在叙述完成后,它开始下一个活动(页面)。有一个选项可以关闭autoplay(以便您可以按自己的速度阅读)…但是关闭它会导致活动——当前页面——“记住”上一个onCompletionListener调用(因为后退按钮用于导航回上一个活动)。随后的活动(页面)工作正常…因为启动onCompletionListener的逻辑检查会阻止它执行 我还尝试将逻

我正在编写一个具有自动播放功能的应用程序,基本上就像一本故事书。我为每个活动(页面)设置了一个媒体播放器
onCompletionListener
,以便在叙述完成后,它开始下一个活动(页面)。有一个选项可以关闭autoplay(以便您可以按自己的速度阅读)…但是关闭它会导致活动——当前页面——“记住”上一个
onCompletionListener
调用(因为后退按钮用于导航回上一个活动)。随后的活动(页面)工作正常…因为启动
onCompletionListener
的逻辑检查会阻止它执行

我还尝试将逻辑检查移动到
onStart()
[而不是
onCreate
],因为切换自动播放的菜单占据了整个屏幕,并导致上一个活动(页面)执行
onStop()
。虽然此设置可防止再次执行
onCompletionListener
,但它仍然不会“取消”上一个
onCompletionListener
。注意:这仅在活动(页面)以
autoplay=on
启动时才会出现问题

我还为那个特定的活动短暂地尝试了
super.recreate()
,试图“重启”一切(希望包括
onCompletionListener
)。然而,结果并不理想(活动被屏蔽,从未重新初始化)

我没有包含任何代码,因为(对我来说)这更像是一个程序性问题。1.是否可以“取消”CompletionListener上的
onCompletionListener
。如果是,怎么做?2.如果不是,(因为我对java/android比较陌生),重新创建方法是否可以接受/有益于“重置”整个活动(以及其中的
onCompletionListener


我的目标是API 11及以上版本。如果您有任何想法/建设性的批评,我们将不胜感激。

那么“取消”它的方法就是使用发布方法。当你打开一个新的页面(活动)

时,你应该考虑这样做:如果你想取消以前设置的<代码> .CONTITONListNave<代码>,你可以简单地设置一个不做任何事的新的。< /P> < P>这里有几种可能的解决方案:

  • 对于onDestroy,使用setOnCompletionListener(null)

  • 在所需的设置发生更改时,还要设置一个全局标志(该标志也将在创建应用程序时设置),并在侦听器事件中检查该标志


  • 好的……我想你是在谈论释放媒体播放器。我为每个页面重置媒体播放器,以便为该页面重新加载相应的文件…但实际上我并没有杀死它。我认为这将是一种更有效的方法,并且不容易发生内存泄漏?是的,我是。如果不释放媒体播放器,所用内存将是所有媒体播放器的总和,可能会导致手机崩溃。我认为逐页加载并在活动结束时释放会更有效。media player文档状态为
    reset()
    会将其恢复到未初始化状态。我假设这释放了所有用于特定媒体播放器的资源…这看起来是个糟糕的假设。谢谢你的反馈。不客气!您可能还希望浏览此图像和相应页面,以便每个活动只有一个oCL?我还没有找到这方面的完整文档…所以我不完全理解oCL的“生命周期”,如果你愿意的话。特定活动的onDestroy后oCL是否被“杀死”?或者它还会在后台徘徊吗。是的,只有一个听众。如果设置一个新的,它将覆盖前一个。2.如果一个聆听者听的是一个死的对象,它将永远不会被称为:)太好了!谢谢你的澄清…谢谢你耐心地回答我的问题。在这一点上,我尽量不“假设”任何事情。谢谢。1.与Rotem建议的类似…我将尝试一下。我正在做2。我只是不认为
    null
    是oCL的目标。我要试一试。