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(); 
    } 
} 

감사합니다 ... 영업과 논의 후

+0

Eclipse MAT에서 누출의 출처를 확인할 수 있습니까? – ksasq

+0

@ksasq이 주제에 따르면 http://code.google.com/p/android/issues/detail?id=2181 WebView 버그와 관련이 있으며, 유감스럽게도이 링크에서 제공되는 해결 방법은 다음과 같습니다. 더 이상 일하지 않는다! – iSun

+0

MAT로 확인해 봤지만 동일한 문제가 발생 했습니까? 그 문제는 제가 볼 수있는 WebView에 대해서는 언급하지 않았습니다. 더 자세히 알려주십시오 - 안드로이드 플랫폼의 어떤 버전에서 누출이 보이나요? 모든 버전에서 재생산됩니까? – ksasq

답변

1

, 그것은이 경우에는 메모리 누수 자체가없는 것으로 보인다; 오히려 WebView는 메모리 사용량이 많은 구성 요소이므로 사용시 상대적으로 많은 양의 RAM을 사용합니다.