Intereting Posts
Исходящее сообщение не отправляется Как скачать исходный код google для Android Android Canvas не рисовал Path, когда точка пути не видна Нужна помощь, чтобы понять утечку памяти в приложении для Android Влияние использования Multidex на производительность приложения, стабильность, совместимость …? Создайте пользовательский Drawable и используйте его в XML Изменение состояния ToggleButton программно, а не автоматически в Android? Вызов метода активности из фрагмента Запуск приложения на нескольких устройствах автоматически в Android Studio Как заблокировать телефон программным способом Изображение кнопки изменяется программно? OpenID для приложений для Android, для которых требуется SignIn Android FragmentStatePagerAdapter возвращает пустой экран при перезагрузке срединных фрагментов Google play предупреждает о добавленном разрешении 'android.permission.READ_CALL_LOG' Менеджер Android SDK, только показывает установленный пакет

Проблема с памятью Viewpager Webview

Я использую viewpager для загрузки около 50 веб-просмотров … Все веб-просмотры загружаются в конкурсы, и каждый из них имеет HTML-страницу, на которую обращается около 70 изображений каждый … Когда я прокручиваю, мое приложение разбивается примерно на 30 страниц , Возможно, из-за веб-просмотров все еще сохраняют ссылку на изображения в папке assests … Есть ли способ опубликовать веб-просмотры, которые Viewpager не использует в это конкретное время?

awesomePager.setAdapter(new AwesomePagerAdapter(this, webviewdata)); 

Детали:

 Android WebView Memory Leak when loading html file from Assets Failed adding to JNI local ref table (has 512 entries) "Thread-375" prio=5 tid=15 RUNNABLE 

А динамическая загрузка webview на просмотрщик

Logcat: Введите описание изображения здесь

Solutions Collecting From Web of "Проблема с памятью Viewpager Webview"

Попробуйте масштабировать растровое изображение. Большая часть времени Bitmap является основной причиной, по которой мы получаем проблему с памятью. Также узнайте, как перерабатывать растровые изображения. Следующий фрагмент поможет вам.

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile( filename, options ); options.inJustDecodeBounds = false; options.inSampleSize = 2; bitmap = BitmapFactory.decodeFile( filename, options ); if ( bitmap != null && exact ) { bitmap = Bitmap.createScaledBitmap( bitmap, width, height, false ); } 

Также убедитесь, что вы переопределили следующий метод.

 @Override public void destroyItem(View collection, int position, Object view) { ((ViewPager) collection).removeView((TextView) view); } 

Или вы можете создать функцию для масштабирования битового массива

 private byte[] resizeImage( byte[] input ) { if ( input == null ) { return null; } Bitmap bitmapOrg = BitmapFactory.decodeByteArray(input, 0, input.length); if ( bitmapOrg == null ) { return null; } int height = bitmapOrg.getHeight(); int width = bitmapOrg.getWidth(); int newHeight = 250; float scaleHeight = ((float) newHeight) / height; // creates matrix for the manipulation Matrix matrix = new Matrix(); // resize the bit map matrix.postScale(scaleHeight, scaleHeight); // recreate the new Bitmap Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true); bitmapOrg.recycle(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); resizedBitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos); resizedBitmap.recycle(); return bos.toByteArray(); } 

WebView работает с JNI, и это может содержать только 512 локальных ссылок, попробуйте загрузить контент прямо из Интернета, и проблема не должна возникать.

Я получаю эту проблему, когда я переопределяю shouldInterceptRequest(WebView view, String url) в webviewclient и передаю локальные ссылки из моего собственного механизма кэширования.

Это может быть ошибкой в ​​самом веб-браузере. По крайней мере, это не так, как должно вести себя, если вы спросите меня.

Настройка типа слоя webview для программного обеспечения.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } 

Но теперь вы теряете аппаратное ускорение, и ваш веб-просмотр может замедляться.