Android clear webview thread, free memory, avoid OutOfMemoryError

前端 未结 3 792
半阙折子戏
半阙折子戏 2021-02-14 08:31

I am displaying a fairly large image in a webview so that the pinch-to-zoom functions and other conveniences for viewing are already available.

It displays correctly the

相关标签:
3条回答
  • 2021-02-14 09:17

    Okay, so the conclusion to this issue was that the String buffer could not be predetermined or properly cleared at these file sizes.

    In this case the image was pulled from a server as a string, manipulated as a string and finally displayed as an image.

    Whether displayed as an ImageView or as a Webview, it did not matter, the app would crash once a string buffer became full (which it would not clear no matter how much stuff I freed or set to null), This was an encryption effort.

    but Finally just settled with storing the images in the app's assets folder.

    0 讨论(0)
  • 2021-02-14 09:20

    Efficient way ever:

    WebViewActivity.java

    public class WebViewActivity extends AppCompatActivity {
    
        private WebView mWebView;
        private RelativeLayout mWebViewParent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web_view);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            mWebViewParent = (RelativeLayout) findViewById(R.id.layoutWebViewParent);
            mWebView = (WebView)findViewById(R.id.webView);
    
            // Other stuff
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            destroyWebView();
        }
    
        private void destroyWebView() {
            mWebViewParent.removeAllViews();
            if(mWebView != null) {
                mWebView.clearHistory();
                mWebView.clearCache(true);
                mWebView.loadUrl("about:blank");
                mWebView.freeMemory();
                mWebView.pauseTimers();
                mWebView = null;
            }
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }
    

    activity_web_view.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/layoutWebViewParent" >
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </WebView>
    
    </RelativeLayout>
    

    AndroidManifest.xml

    <activity
        android:name=".WebViewActivity"
        android:label="@string/title_activity_web_view"
        android:process="webview.kill">
    </activity>
    

    Hope this will help you.

    0 讨论(0)
  • 2021-02-14 09:28

    Maybe try recycling the bitmap/image?

    If that doesn't work, I suggest re-sampling it.

    Strange out of memory issue while loading an image to a Bitmap object

    0 讨论(0)
提交回复
热议问题