Android辅助显示 - 跨活动调用的持久性

gcl*_*cl1 6 multithreading android hdmi android-activity

我使用Android MediaRouter(API 16)和Presentation(API 17)类来生成和管理辅助显示.我按照ApiDemos中的示例创建了独特的非镜像输出,到目前为止它工作正常(使用通过HDMI线连接到HDTV的Nexus 10进行测试).

现在,我有一种情况,我希望创建的Presentation对象Activity X继续在辅助显示器上运行,即使Activity X调用另一个Activity Y.在这种情况下,Activity X仍然在堆栈上,但Activity Y现在是在它上面.

问题是,Activity Y启动时,物理辅助显示器将恢复镜像.当我退出时Activity Y,Activity X's演示文稿的内容会回来(因为我从未打过dismiss()它).

所以问题是:即使在本地设备上运行从属活动,如何将演示文稿附加到该显示器上运行的辅助显示器上?

更新:我想到的一种方法是Presentation从后台线程实例化对象; 然后,另一个的后续创建Activity不应该干扰后台线程写入其Presentation对象的内容.但我不确定这是否可行,因为通常不允许从后台线程更新UI.

另一种方法是Activity如果可能的话,禁止下级使用辅助显示器,从而防止它在新的Activity活动时将辅助显示器恢复为镜像.但我也没有办法做到这一点.再次感谢您的任何建议.

gcl*_*cl1 2

我实施了 @CommonsWare 建议的方法之一(以及 Mark Allison 在他的博客上独立回答我的问题)。感谢您的建议!

回顾一下,问题是我无法在Activity本地设备上的调用中保持第二个屏幕演示在后台运行。这是因为该类Presentation是作为 的子类实现的Dialog,因此与Activity实例相关联。因此,当新的Activity启动时,第二个屏幕返回镜像(而不是显示我专门为其生成的其他内容)。

解决方案是将所有“下属”重构ActivitiesFragments原始屏幕Activity(即启动第二个屏幕的屏幕)。然后,我不调用 ,而是使用startActivity()启动/停止新的。最终效果是启动Presentation的Activity仍在运行,因此当新的Activity启动时辅助显示不再中断。FragmentsFragmentTransactions

我的情况变得更加复杂,因为顶层Activity(启动第二个屏幕)实际上是SherlockFragmentActivity使用ViewPagerand的FragmentStatePagerAdapter- 所以我不得不将所有这些都塞进一个Fragment. 它还需要对ActionBar选项卡、菜单项和主页图标进行显式管理。

总的来说,我认为代码有点不太透明......但它有效!

注意:谷歌实现了辅助屏幕界面,这很好。但我不确定他们为什么这样做。如果他们提供一个更通用的Presentation解决方案,可以轻松地在后台运行(即,无论设备上的Dialog前台如何),而不是将类硬塞到 中,那就太好了。Activities如上所述,这样的解决方案可以使我免于进行大量代码重构。