7.5.5 WebView Cache Issues
Category Android Basic Tutorial
Introduction:
>
Many portal information websites, such as Huxiu, ifanr, and TMTpost, have apps that, in simple terms, are information reading apps. Many of these apps use a WebView to display related information, which may involve WebView caching!
The so-called page cache refers to: saving the necessary HTML, JS, CSS, and other page-related data and resources when loading a webpage. When there is no network or the network condition is poor, load the locally saved relevant data! There are two ways to achieve this cache. One is to write a download Service in the background, download the article-related data according to your needs into the database or save it to the corresponding folder, and then next time before loading the corresponding URL, check if there is local cache. If it exists, load the local cache first; if it does not exist, perform a network request and cache the relevant resources. A typical example is the old version of 36Kr, which would first offline the articles and then display them!
Of course, this section is not about this self-written logic method, but about caching pages through the cache function that WebView itself comes with. This method is very simple to use. We just need to enable the relevant functions for WebView and set the cache path of the database to complete the caching! The specific implementation will be detailed below.
1. Types of Cache:
>
The first thing to mention is the classification of cache. The data we cache is divided into: Page Cache and Data Cache
-
Page Cache: Loading the HTML, JS, CSS, and other page or resource data of a webpage. These cached resources are generated due to the browser's behavior, and developers can only indirectly influence these cached data by configuring the HTTP response header to affect the browser's behavior. The cache index is located at: /data/data/<package_name>/databases. The corresponding files are located at: /data/data/package_name/cache/webviewCacheChromunm.
-
Data Cache: Divided into AppCache and DOM Storage. We developers can control these cached resources ourselves.
-
AppCache: We can selectively cache everything in the web browser, from pages and images to scripts and CSS, etc. It is especially useful when dealing with CSS and JavaScript files that are applied across multiple pages of a website. Its size is currently typically 5MB. In Android, it needs to be manually enabled (setAppCacheEnabled), and the path (setAppCachePath) and capacity (setAppCacheMaxSize) need to be set. In Android, ApplicationCache.db is used to save AppCache data!
-
DOM Storage: Stores some simple data that can be resolved with a key/value pair. Depending on the scope of action, there are Session Storage and Local Storage, which are used for session-level storage (the page disappears when closed) and local storage (the data will never expire unless actively deleted). In Android, DOM Storage can be manually enabled (setDomStorageEnabled) and the storage path can be set (setDatabasePath). In Android, Webkit will generate two files for DOMStorage (my_path/localstorage/http_blog.csdn.net_0.localstorage and my_path/Databases.db).
Well, after reading the above, do you want to say, "What the hell, it looks so complicated?" Android Record 25 - WebView Offline Cache Reading
-1.0 Android Basic Introduction Tutorial
-1.0.1 2015 Latest Android Basic Introduction Tutorial Contents
-1.1 Background and System Architecture Analysis
-1.2 Development Environment Setup
-1.2.1 Developing Android APP with Eclipse + ADT + SDK
-1.2.2 Developing Android APP with Android Studio
-1.3 Solving SDK Update Issues
-1.4 Genymotion Emulator Installation
-1.5.1 Git Tutorial for Basic Local Repository Operations
-1.5.2 Git: Setting Up Remote Repository with GitHub
-1.6 How to Use 9-Patch Images
-1.7 Interface Prototype Design
-1.8 Project Source Analysis (Various Files, Resource Access)
-1.9 Android Application Signing and Packaging
-1.11 Decompiling APK to Retrieve Code & Resources
-2.1 Concepts of View and ViewGroup
-2.2.1 LinearLayout (Linear Layout)
-2.2.2 RelativeLayout (Relative Layout)
-2.2.3 TableLayout (Table Layout)
-2.2.4 FrameLayout (Frame Layout)
-2.2.5 GridLayout (Grid Layout)
-2.2.6 AbsoluteLayout (Absolute Layout)
-2.3.1 Detailed Explanation of TextView (Text Field)
-2.3.2 Detailed Explanation of EditText (Input Field)
-2.3.5 RadioButton (Radio Button) & Checkbox (Checkbox)
-2.3.6 ToggleButton and Switch
-2.3.7 ProgressBar (Progress Bar)
-2.3.9 RatingBar (Star Rating Bar)
-2.4.1 ScrollView (Scroll Bar)
-2.4.2 Date & Time Components (Part 1)
-2.4.3 Date & Time Components (Part 2)
-2.4.5 Simple Usage of ListView
-2.4.6 Optimization of BaseAdapter
-2.4.7 Focus Issues in ListView
-2.4.8 Solving Checkbox Misalignment in ListView
-2.4.9 Data Update Issues in ListView
-2.5.0 Building a Reusable Custom BaseAdapter
-2.5.1 Implementing Multiple Item Layouts in ListView
-2.5.2 Basic Usage of GridView (Grid View)
-2.5.3 Basic Usage of Spinner (List Option Box)
-2.5.4 Basic Usage of AutoCompleteTextView (Auto-complete Text Field)
-2.5.5 Basic Usage of ExpandableListView (Collapsible List)
-2.5.6 Basic Usage of ViewFlipper (Flip View)
-2.5.8 Detailed Explanation of Notification (Status Bar Notification)
-2.5.9 Detailed Explanation of AlertDialog (Dialog Box)
-2.6.0 Basic Usage of Other Common Dialogs
-2.6.1 Basic Usage of PopupWindow (Floating Box)
-2.6.3 Simple Usage of ViewPager
-2.6.4 Simple Usage of DrawerLayout (Official Side Menu)
-3.1.1 Event Handling Mechanism Based on Listeners
-3.2 Event Handling Mechanism Based on Callbacks
-3.3 Analysis of Handler Message Passing Mechanism
-3.4 TouchListener vs OnTouchEvent + Multi-touch
-3.5 Listening to Content Changes in EditText
-3.6 Responding to System Settings Events (Configuration Class)
-3.7 AsyncTask Asynchronous Task
-4.3.1 BroadcastReceiver Beginner
-4.3.2 BroadcastReceiver Intermediate
-4.4.1 ContentProvider Introduction
-4.4.2 ContentProvider Intermediate - Document Provider
-4.5.2 Passing Complex Data with Intent
-5.1 Basic Overview of Fragment
- 5.2.1 Fragment Example Walkthrough - Bottom Navigation Bar Implementation (Method 1)
- 5.2.2 Fragment Example Walkthrough - Bottom Navigation Bar Implementation (Method 2)
- 5.2.3 Fragment Example Walkthrough - Bottom Navigation Bar Implementation (Method 3)
- 5.2.4 Fragment Example Walkthrough - Bottom Navigation Bar + ViewPager Slide Switching Pages
- 5.2.5 Fragment Example Walkthrough - Simple Implementation of News (Shopping) App List Fragment
- 6.1 Data Storage and Access - File Storage and Reading/Writing
- 6.2 Data Storage and Access - SharedPreferences for Saving User Preferences
- 6.3.1 Data Storage and Access - Introduction to SQLite Database
- 6.3.2 Data Storage and Access - Further Exploration of SQLite Database
- 7.1.1 Android Network Programming Essentials and HTTP Protocol Study
- 7.1.2 Android HTTP Request Headers and Response Headers Study
- 7.1.3 Android HTTP Request Method: HttpURLConnection
- 7.1.4 Android HTTP Request Method: HttpClient
- 7.2.1 Android XML Data Parsing
- 7.2.2 Android JSON Data Parsing
- 7.3.1 Android File Upload
- 7.3.2 Android File Download (1)
- 7.3.3 Android File Download (2)
- 7.4 Android Calling WebService
- 7.5.1 WebView (Web View) Basic Usage
- 7.5.2 WebView and JavaScript Interaction Basics
- 7.5.3 Important Considerations for WebView in Android 4.4 and Later
- 7.5.4 WebView File Download
- 7.5.5 WebView Cache Issues
- 7.5.6 WebView Handling Webpage Error Code Information
- 7.6.1 Socket Network Basics Preparation
- 7.6.2 TCP Protocol Based Socket Communication (1)
- 7.6.3 TCP Protocol Based Socket Communication (2)
- 7.6.4 UDP Protocol Based Socket Communication
- 8.1.1 Summary of 13 Drawable Types in Android Part 1
- 8.1.2 Summary of 13 Drawable Types in Android Part 2
- 8.1.3 Summary of 13 Drawable Types in Android Part 3
- 8.2.1 Bitmap (Bitmap) Comprehensive Analysis Part 1
- 8.2.2 OOM Issues Caused by Bitmap
- 8.3.1 Detailed Explanation of Three Drawing Tool Classes
- 8.3.2 Drawing Class Practical Examples
- 8.3.3 Paint API - MaskFilter (Mask)
- 8.3.4 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 1)
- 8.3.5 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 2)
- 8.3.6 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 3)
- 8.3.7 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 4)
- 8.3.8 Paint API - Xfermode and PorterDuff Detailed Explanation (Part 5)
- 8.3.9 Paint API - ColorFilter (Color Filter) (1/3)
- 8.3.10 Paint API - ColorFilter (Color Filter) (2/3)
- 8.3.11 Paint API - ColorFilter (Color Filter) (3/3)
- 8.3.12 Paint API - PathEffect (Path Effect)
- 8.3.13 Paint API - Shader (Image Rendering)
- 8.3.14 Paint Enumerations/Constants and ShadowLayer Shadow Effects
- 8.3.15 Paint API - Typeface (Font Style)
- 8.3.16 Canvas API Detailed Explanation (Part 1)
- 8.3.17 Canvas API Detailed Explanation (Part 2) Clipping Methods Collection
- 8.3.18 Canvas API Detailed Explanation (Part 3) Matrix and drawBitmapMesh
- 8.4.1 Android Animation Collection - Frame Animation
- 8.4.2 Android Animation Collection - Tween Animation
- 8.4.3 Android Animation Collection - Property Animation - Introduction
- 8.4.4 Android Animation Collection - Property Animation - Further Exploration
- 9.1 Using SoundPool to Play Sound Effects (Duang~)
- 9.2 MediaPlayer for Audio and Video Playback
- 9.3 Using Camera to Take Photos
- 9.4 Using MediaRecord for Audio Recording
- 10.1 TelephonyManager (Telephony Manager)
- 10.2 SmsManager (SMS Manager)
- 10.3 AudioManager (Audio Manager)
- 10.4 Vibrator (Vibrator)
- 10.5 AlarmManager (Alarm Service)
- 10.6 PowerManager (Power Service)
- 10.7 WindowManager (Window Management Service)
- 10.8 LayoutInflater (Layout Service)
- 10.9 WallpaperManager (Wallpaper Manager)
- 10.10 Sensor Topic (1) - Introduction
- 10.11 Sensor Topic (2) - Orientation Sensor
- 10.12 Sensor Topic (3) - Accelerometer/Gyroscope Sensor
- 10.12 Sensor Topic (4) - Understanding Other Sensors
- 10.14 Android GPS Introduction
- 11.0 "2015 Latest Android Basic Beginner's Guide" Completion Celebration
- 12.1 Android Practice: DrySister View Girls App (Version 1) -- Project Setup and Simple Implementation
12.2 DrySister View Girls App (Version 1) -- 2. Parsing Backend Data
12.4 DrySister View Girls App (Version 1) -- 4. Adding Data Caching (Introducing SQLite)
12.5 DrySister View Girls App (Version 1) -- 5. Code Review, Adjustments, and Logging Class Writing