0
웹 서비스를 기반으로하는 앱을 디자인하고 싶습니다. 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;
}
}
이 상황에서 제거 또는 web-service
에서 직접 페이지를 압정 어떤 다른 대안 방법이 얻을 방법에 어떤 아이디어가?
테스트 케이스 활동 사전에
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();
}
}
감사합니다 ... 영업과 논의 후
Eclipse MAT에서 누출의 출처를 확인할 수 있습니까? – ksasq
@ksasq이 주제에 따르면 http://code.google.com/p/android/issues/detail?id=2181 WebView 버그와 관련이 있으며, 유감스럽게도이 링크에서 제공되는 해결 방법은 다음과 같습니다. 더 이상 일하지 않는다! – iSun
MAT로 확인해 봤지만 동일한 문제가 발생 했습니까? 그 문제는 제가 볼 수있는 WebView에 대해서는 언급하지 않았습니다. 더 자세히 알려주십시오 - 안드로이드 플랫폼의 어떤 버전에서 누출이 보이나요? 모든 버전에서 재생산됩니까? – ksasq