add onPause and onResume apis, to inform the view when it can pause
its activities associated with the DOM.
This commit is contained in:
@@ -370,6 +370,9 @@ public class WebView extends AbsoluteLayout
|
||||
// Whether or not to draw the focus ring.
|
||||
private boolean mDrawFocusRing = true;
|
||||
|
||||
// true if onPause has been called (and not onResume)
|
||||
private boolean mIsPaused;
|
||||
|
||||
/**
|
||||
* Customizable constant
|
||||
*/
|
||||
@@ -997,7 +1000,7 @@ public class WebView extends AbsoluteLayout
|
||||
|
||||
/**
|
||||
* If platform notifications are enabled, this should be called
|
||||
* from onPause() or onStop().
|
||||
* from the Activity's onPause() or onStop().
|
||||
*/
|
||||
public static void disablePlatformNotifications() {
|
||||
Network.disablePlatformNotifications();
|
||||
@@ -1938,21 +1941,58 @@ public class WebView extends AbsoluteLayout
|
||||
}
|
||||
|
||||
/**
|
||||
* Pause all layout, parsing, and javascript timers. This can be useful if
|
||||
* the WebView is not visible or the application has been paused.
|
||||
* Pause all layout, parsing, and javascript timers for all webviews. This
|
||||
* is a global requests, not restricted to just this webview. This can be
|
||||
* useful if the application has been paused.
|
||||
*/
|
||||
public void pauseTimers() {
|
||||
mWebViewCore.sendMessage(EventHub.PAUSE_TIMERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resume all layout, parsing, and javascript timers. This will resume
|
||||
* dispatching all timers.
|
||||
* Resume all layout, parsing, and javascript timers for all webviews.
|
||||
* This will resume dispatching all timers.
|
||||
*/
|
||||
public void resumeTimers() {
|
||||
mWebViewCore.sendMessage(EventHub.RESUME_TIMERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to pause any extra processing associated with this view and
|
||||
* its associated DOM/plugins/javascript/etc. For example, if the view is
|
||||
* taken offscreen, this could be called to reduce unnecessary CPU and/or
|
||||
* network traffic. When the view is again "active", call onResume().
|
||||
*
|
||||
* Note that this differs from pauseTimers(), which affects all views/DOMs
|
||||
* @hide
|
||||
*/
|
||||
public void onPause() {
|
||||
if (!mIsPaused) {
|
||||
mIsPaused = true;
|
||||
mWebViewCore.sendMessage(EventHub.ON_PAUSE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this to balanace a previous call to onPause()
|
||||
* @hide
|
||||
*/
|
||||
public void onResume() {
|
||||
if (mIsPaused) {
|
||||
mIsPaused = false;
|
||||
mWebViewCore.sendMessage(EventHub.ON_RESUME);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the view is paused, meaning onPause() was called. Calling
|
||||
* onResume() sets the paused state back to false.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isPaused() {
|
||||
return mIsPaused;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the resource cache. Note that the cache is per-application, so
|
||||
* this will clear the cache for all WebViews used.
|
||||
|
||||
@@ -591,6 +591,8 @@ final class WebViewCore {
|
||||
"TOUCH_UP", // = 140;
|
||||
"TOUCH_EVENT", // = 141;
|
||||
"SET_ACTIVE", // = 142;
|
||||
"ON_PAUSE", // = 143
|
||||
"ON_RESUME", // = 144
|
||||
};
|
||||
|
||||
class EventHub {
|
||||
@@ -647,6 +649,11 @@ final class WebViewCore {
|
||||
// or not, based on whether the WebView has focus.
|
||||
static final int SET_ACTIVE = 142;
|
||||
|
||||
// pause/resume activity for just this DOM (unlike pauseTimers, which
|
||||
// is global)
|
||||
static final int ON_PAUSE = 143;
|
||||
static final int ON_RESUME = 144;
|
||||
|
||||
// Network-based messaging
|
||||
static final int CLEAR_SSL_PREF_TABLE = 150;
|
||||
|
||||
@@ -841,6 +848,14 @@ final class WebViewCore {
|
||||
}
|
||||
break;
|
||||
|
||||
case ON_PAUSE:
|
||||
nativePause();
|
||||
break;
|
||||
|
||||
case ON_RESUME:
|
||||
nativeResume();
|
||||
break;
|
||||
|
||||
case SET_NETWORK_STATE:
|
||||
if (BrowserFrame.sJavaBridge == null) {
|
||||
throw new IllegalStateException("No WebView " +
|
||||
@@ -1750,4 +1765,7 @@ final class WebViewCore {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private native void nativePause();
|
||||
private native void nativeResume();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user