我正在尝试使用 WebView 在我的活动中显示 Flash 内容。一切都运行良好,但是当用户点击 home 键将活动置于后台时,Flash 内容继续运行(声音继续播放等)
我注意到库存的 Android 浏览器和 Dolphin 浏览器似乎都避免了这个问题,并且在将浏览活动置于后台时会正确暂停 Flash 内容。
理想情况下,我想要一个解决方案,如果活动完成,则完全杀死 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/resumeTimers),尽管我担心我一直在查看的代码已经过时,因为它正在调用不'似乎已经不存在了。
我确实通过使用更新计数器的简单 JavaScript setInterval 进行测试来验证对 pauseTimers 的调用是否有效。关于 Window 或 View 管理,我还应该尝试其他一些明显的事情吗?
移动 Flash 播放器的文档说:
Flash Player 还会自动暂停 SWF 播放(例如,当接到电话或警报响起时)不在视图或前台应用程序中,以减少 CPU 使用率、电池使用率和内存使用率。
这似乎在股票浏览器和海豚浏览器中都能完美运行,但在我的应用程序中却没有。任何想法/解决方案将不胜感激!
更新:这是我们最终添加到活动中以使其正常工作的功能。我们在活动的 onPause 函数中使用“onPause”来调用它,在活动的 onResume 函数中使用“onResume”来调用它:
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);
}
}
}