gpt4 book ai didi

java - 在后台跟踪网页

转载 作者:行者123 更新时间:2023-12-01 13:41:18 24 4
gpt4 key购买 nike

我想设计一个基于网络服务的应用程序,我还想通过 WebView 根据网络服务数据打开一些后台页面,以便能够跟踪 中的页面GoogleAnalytics

为了实现这个想法,我编写了以下单例,它按我的预期工作,但是这段代码中有奇怪的内存泄漏行为,我认为它导致了 WebView 错误!

public class SiteLoader {
private static SiteLoader mSiteLoader;

private WebView mWebView;

private Context c;

public enum LoaderUri {
MUSIC_URI, VIDEO_URI, BOOK_URI
}

private SiteLoader(Context c) {
this.c = c.getApplicationContext();
}

public static SiteLoader getInstance(Context c) {
if (mSiteLoader == null)
mSiteLoader = new SiteLoader(c);

return mSiteLoader;
}

public void trackUri(LoaderUri uri, String extraData) {
// Load new progress
switch (uri) {
case MUSIC_URI:
getWebView().loadUrl(Constants.HOST_PREFIX + "/music/?id=" + extraData);
break;
case VIDEO_URI:
getWebView().loadUrl(Constants.HOST_PREFIX + "/video/?id=" + extraData);
break;
case BOOK_URI:
getWebView().loadUrl(Constants.HOST_PREFIX + "/book/?id=" + extraData);
break;
}
}

public void destroyTracker() {
if (mWebView != null) {
mWebView.destroy();
mWebView = null;
}
}

private WebView getWebView() {
if (mWebView == null) {
mWebView = new WebView(c);
mWebView.getSettings().setJavaScriptEnabled(true);
}

return mWebView;
}
}

有什么想法可以摆脱这种情况,或者有其他替代方法可以直接在网络服务中定位页面吗?

测试用例 Activity :

public class TestActivity extends Activity {
@Override
public void onResume() {
super.onResume();
SiteLoader.getInstance(this).trackUri(LoaderUri.VIDEO_URI, "en");
}

@Override
public void onPause() {
super.onResume();
SiteLoader.getInstance(this).destroyTracker();
}

@Override
public void onCreate(Bundle mBundle) {
super.onCreate(mBundle);
Toast.makeText(this, "System is running", Toast.LENGTH_LONG).show();
}
}

提前致谢...

最佳答案

与OP讨论后,看来这种情况下本身不存在内存泄漏;相反,WebView 是一个内存密集型组件,在使用时会消耗相对较高的 RAM。

关于java - 在后台跟踪网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20748988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com