我正在尝试使用WebView在活动中显示闪存内容。一切正常工作,但是当用户键入主钥匙以将活动放入后台时,Flash内容会保持运行(声音保持播放等)

我已经注意到,库存的Android浏览器和海豚浏览器似乎都避免了此问题,并且当将浏览活动放入后台时,可以正确暂停闪存内容。

理想情况下,我想要一个解决方案,如果活动正在完成,则完全杀死Webview,但请暂停(基本上复制浏览器的默认行为)

这是我进行的一个简单测试,它在Kongregate上加载了一个背景音乐的游戏:

    public class BrowserTest extends Activity {
    private WebView mWebView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            mWebView = new WebView(this);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.getSettings().setPluginsEnabled(true);

            mWebView.loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile");
            setContentView(mWebView);
        }

        @Override
        protected void onPause(){
            super.onPause();

            mWebView.pauseTimers();
            if(isFinishing()){
                mWebView.loadUrl("about:blank");
                setContentView(new FrameLayout(this));
            }
        }

        @Override
        protected void onResume(){
            super.onResume();
            mWebView.resumeTimers();
        }
    }

我看了库存浏览器的最新来源,它似乎正在做类似的事情(调用Pausetimers/remumetimers),尽管我担心我一直在寻找的代码已经过时了,因为它是在调用功能似乎已经存在了。

我确实验证了对Pausetimers的调用是通过使用更新计数器的简单JavaScript SetInterval测试来工作的。在窗口或查看管理方面,还有其他明显的事情吗?

移动闪光灯播放器的文档说:

Flash Player还将自动暂停SWF播放,它不在视图或前景应用程序中,例如接收到呼叫或警报打开时,以减少CPU利用率,电池使用情况和内存使用情况。

这似乎在库存浏览器和海豚浏览器中都可以很好地工作,但在我的应用程序中却没有。任何想法/解决方案都将不胜感激!

更新: 这是我们最终增加活动以使其工作的功能。我们在活动的Onpause函数中称其为“ Onpause”,而活动的Onresume函数中则称其为“ on Resume”:

private void callHiddenWebViewMethod(String name){
    if( mWebView != null ){
        try {
            Method method = WebView.class.getMethod(name);
            method.invoke(mWebView);
        } catch (NoSuchMethodException e) {
            Log.error("No such method: " + name, e);
        } catch (IllegalAccessException e) {
            Log.error("Illegal Access: " + name, e);
        } catch (InvocationTargetException e) {
            Log.error("Invocation Target Exception: " + name, e);
        }
    }
}
有帮助吗?

解决方案

我看不到你在哪里看到 BrowserActivity 或任何正在打电话的 pauseTimers(). 。我知道哪里 onPause() 为了 BrowserActivity 最终路线到达 onPause()WebView. 。然而, onPause()WebView@hide 注释,也不是SDK的一部分。在袖口上,看来您想要的是您想要的,给定评论:

称此暂停与此视图及其关联的DOM/插件/JavaScript/等相关的任何额外处理。例如,如果将视图放在屏幕上,则可以调用该视图以减少不必要的CPU和/或网络流量。当视图再次“活动”时,请致电onResume()。

注意“插件”的引用,该引用未在 pauseTimers() 文档。

我会尝试使用反射来看看是否 onPause() (然后 onResume(), ,当您希望东西再次启动时)做您需要的。如果是这样,请发布一个问题 b.android.com 关于这一点,要求他们将这些方法(或等效)添加到SDK中。您的需求似乎是一个普遍的要求,而超过SDK的解决方案并不是一个好的解决方案。

其他提示

@Override
protected void onPause() {
    super.onPause();
    this.callHiddenWebViewMethod("onPause");
}

@Override
protected void onResume() {
    super.onResume();
    this.callHiddenWebViewMethod("onResume");
}

这就是您在活动中称其为魅力的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top