如何停止在我的网页浏览中播放的YouTube视频?当我点击后退按钮时,视频不会停止,而是在后台继续播放.
码:
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setSupportZoom(false);
webView.loadData(myUrl,"text/html", "utf-8");
Run Code Online (Sandbox Code Playgroud) 当应用程序在后台时,我决定测试phonegap WebView是否正常运行.
function test2(x){
$('<div></div>', {text: x.cmd}).appendTo($('#list'));
}
$(function(){test2({cmd:"start"});});
function cb_pause(){test2({cmd:"pause"});}
function cb_resume(){ test2({cmd:"resume"});}
function tick(){test2({cmd:"timer" + timer});timer++;setTimeout(tick, 1000);}
document.addEventListener("pause", cb_pause, false);
document.addEventListener("resume", cb_resume, false);
tick();
Run Code Online (Sandbox Code Playgroud)
它打印pause和resume打开onPause和onResume.和打印timer0,timer1等每一秒.
即使我离开应用程序并开始玩游戏,它也在打印.我知道我可以并且应该停止计时器onPause但仍然.看起来不对劲.我预计android会冻结WebView.
我知道后台线程在后台应用程序中不会停止,直到它被卸载.
所以问题是:是否有办法冻结/暂停/卸载webview onPause和解冻/恢复/加载onResume
当我说加载时我的意思是当用户离开app时它应该处于相同的状态.
当我说冻结时,我的意思是我的代码即使在它将继续调用时也会暂停 setTimeout
我想我希望Android的行为像iOS一样.
我正在使用Google Admob SDK v6.1.0(https://developers.google.com/mobile-ads-sdk/download),并以编程方式(不是以XML格式)实例化com.google.ads.AdView,并添加它在我的Activity中动态地变成LinearLayout.
我的一位用户报告说,当他们在我的Activity中点击Home按钮时(为了让它背景),他们开始看到来自我的应用程序的高CPU使用率.我能够在Jellybean平台上重现这一点,并注意到高CPU使用率的来源是WebViewCoreThread.
我的Activity根本不使用任何WebView,但我能够逐步完成Activity的初始化,并注意到当我实例化AdMob AdView对象时,此WebViewCoreThread会启动.作为AdMob引用中的状态,我在Activity的onDestroy()方法中调用此AdView上的destroy().我改变了我的代码,在我的onPause()方法中调用了AdView.onDestroy().但似乎没有任何因素导致WebViewCoreThread停止.我猜,如果那个线程坚持下去,我没关系.但是,如果我反复多次启动我的Activity,这个线程开始使用我的CPU的8%到25%之间的任何地方,即使我的活动不在前台.
我注意到其他一些用户说你必须调用WebView.onPause()作为纠正措施.(http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3)但这对我来说不是直接可行的,因为我的网页视图是由AdMob的AdView创建的.我还改变了我的代码,调用.removeAllViews()为mt Admob AdView的容器LinearLayout对象,然后调用System.gc()强制垃圾收集,但似乎什么都没有杀死我的WebViewCoreThread并最终开始吃掉CPU直到我强行 - 杀了我的应用程序.
AdMob为什么这样做的任何线索,以及我如何强制杀死这个线程?
我附加了一个我创建的类来封装AdView的创建和销毁.我在我的活动的初始化中调用了这个类的getNewAd()方法.我在Activity的onPause()和onDestroy()方法中调用了这个类的removeAd():
package com.shiprack.client;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import com.mobclix.android.sdk.Mobclix;
import com.mobclix.android.sdk.MobclixMMABannerXLAdView;
import android.app.Activity;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class AdManager {
public AdManager(EventLog logger, LinearLayout container, Activity activity) {
_container = container;
_activity = activity;
_eventLogger = logger;
}
public void setNetwork(int network) {
_network = network;
}
public void getNewAd() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
params.gravity = Gravity.CENTER;
switch (_network) { …Run Code Online (Sandbox Code Playgroud) 使用地图我有一个活动,当没有可用的连接时启动,并使用离线地图(MapQuest).活动运行正常,显示地图,以及所有叠加,标记等.当用户点击其中一个标记信息窗口时,将启动另一个活动,此时我在日志中收到一堆红色错误消息,但应用程序不会崩溃.这些消息(init在标题中)似乎谈论了ZoomButtons和触摸事件.对于代码中的ZoomButtons或触摸事件(多点触控),只有两行:
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);
Run Code Online (Sandbox Code Playgroud)
而不是任何对话......
如果我写:
map.setBuiltInZoomControls(假); map.setMultiTouchControls(假);
红色错误消息消失但当然用户无法以任何方式放大或缩小...
由于错误(带有"true"参数)仅在启动另一个活动时发生,我认为我必须在pause()上添加一些内容,即:
onPause(){
map.setBuiltInZoomControls(false);
map.setMultiTouchControls(false);
super.OnPause();
}
Run Code Online (Sandbox Code Playgroud)
----但这样做并没有改变任何东西......任何提示??? - 提前致谢!
我创建了一个用于播放视频的应用程序。它工作正常,但问题是 - 当我按下设备上的后退按钮时,Activity 没有关闭。视频正在后台播放。我正在使用onBackpressed(). 如何关闭当前活动?