Android 是否可以在实时壁纸上切换发动机类别? 背景

Android 是否可以在实时壁纸上切换发动机类别? 背景,android,live-wallpaper,Android,Live Wallpaper,假设我有一个相对简单的实时墙纸应用程序,它使用surfaceHolder.lockCanvas()(示例)通过画布显示简单内容 live wallpaper类(扩展了WallperService)必须通过onCreateEngine函数将引擎返回给它一次 问题 如果我想支持更复杂的内容,比如视频,事情就会变得更复杂。为此,我找到了一个很好的库: 该库使用自己的引擎类实现(OpenGL)来显示视频内容 不幸的是,Android上似乎没有办法在运行时在引擎实例之间切换 我发现了什么 我试图调用st

假设我有一个相对简单的实时墙纸应用程序,它使用
surfaceHolder.lockCanvas()
(示例)通过画布显示简单内容

live wallpaper类(扩展了
WallperService
)必须通过
onCreateEngine
函数将引擎返回给它一次

问题 如果我想支持更复杂的内容,比如视频,事情就会变得更复杂。为此,我找到了一个很好的库:

该库使用自己的引擎类实现(OpenGL)来显示视频内容

不幸的是,Android上似乎没有办法在运行时在引擎实例之间切换

我发现了什么
  • 我试图调用
    stopSelf
    ,但由于该服务绑定到操作系统,因此不可能。我还试图覆盖
    onBind
    ,但我不能,因为它被标记为
    final
    。我也没有看到任何可能的反射解决方案

  • 我认为我找到的唯一可行的方法是在Android上做一件最不推荐的事情:在live wallpaper使用的进程上调用
    System.exit()
    。这会导致它重新启动,并重新创建它应该使用的引擎

  • 我可能会在同一个应用程序中创建一个新的实时壁纸类,但用户将不得不再次选择它,这是一个糟糕的用户体验,我希望避免它

  • 问题 是否有任何方法可以在运行时切换实时墙纸应用程序的引擎?除了我发现的以外,还有其他解决办法吗