Example #1
0
 /**
  * Called by subclass to service a rendering request. If REASON_RENDER (and when
  * REASON_REPLACE/RESIZE triggers a render) this doesn't actually do rendering but returns true.
  * This prevents potentially lengthy rendering from blocking the requester.
  *
  * @return Whether calling subclass should perform a render.
  * @throws IOException
  */
 protected synchronized boolean serviceRenderRequest() {
   boolean rendering = false;
   try {
     switch (mRenderReason) {
       case REASON_INIT:
         mWidth = getCurrentScreenWidth();
         mHeight = getCurrentScreenHeight();
         if (null != mRenderer) {
           mRenderer.initRendering(this, mWidth, mHeight);
           mReady = true;
           notifyAll();
           rendering = true;
         }
         break;
       case REASON_DISPOSE:
         mReady = false;
         if (null != mRenderer) mRenderer.deleteRendering(this);
         break;
       case REASON_RESIZE:
         int w = getCurrentScreenWidth();
         int h = getCurrentScreenHeight();
         if (w != mWidth || h != mHeight) {
           mWidth = w;
           mHeight = h;
           if (null != mRenderer) {
             mRenderer.resizeRendering(this, w, h);
             rendering = mRendering;
           }
         }
         break;
       case REASON_RENDER:
         rendering = true;
         break;
       case REASON_REPLACE:
         if (null != mRenderer) mRenderer.replacingRenderer(this);
         mRenderer = mNewRenderer;
         mNewRenderer = null;
         if (null != mRenderer) {
           mRenderer.replacedRenderer(this);
           rendering = mRendering;
         }
         break;
     }
     mRendering = rendering;
     if (mRenderBlocking) {
       notifyAll();
       mRenderBlocking = false;
     }
   } catch (Throwable e) {
     rendering = false;
     Log.e(TAG, "Exception in RenderContext", e);
   }
   return rendering;
 }