Continue error check improvements and write some docs.

Change-Id: I345b08490da21d9ee715ff1ddc80c1a816b579f4
diff --git a/graphics/java/android/renderscript/BaseObj.java b/graphics/java/android/renderscript/BaseObj.java
index 69907d9..026f7de 100644
--- a/graphics/java/android/renderscript/BaseObj.java
+++ b/graphics/java/android/renderscript/BaseObj.java
@@ -21,9 +21,12 @@
 /**
  * @hide
  *
+ * BaseObj is the base class for interfacing with native renderscript objects.
+ * It primarly contains code for tracking the native object ID and forcably
+ * disconecting the object from the native allocation for early cleanup.
+ *
  **/
 class BaseObj {
-
     BaseObj(int id, RenderScript rs) {
         rs.validate();
         mRS = rs;
@@ -31,6 +34,13 @@
         mDestroyed = false;
     }
 
+    void setID(int id) {
+        if (mID != 0) {
+            throw new RSRuntimeException("Internal Error, reset of object ID.");
+        }
+        mID = id;
+    }
+
     public int getID() {
         if (mDestroyed) {
             throw new RSInvalidStateException("using a destroyed object.");
@@ -38,9 +48,9 @@
         return mID;
     }
 
-    int mID;
-    boolean mDestroyed;
-    String mName;
+    private int mID;
+    private boolean mDestroyed;
+    private String mName;
     RenderScript mRS;
 
     public void setName(String s) {
@@ -74,7 +84,7 @@
         super.finalize();
     }
 
-    public void destroy() {
+    synchronized public void destroy() {
         if(mDestroyed) {
             throw new RSInvalidStateException("Object already destroyed.");
         }
@@ -85,6 +95,8 @@
     // If an object came from an a3d file, java fields need to be
     // created with objects from the native layer
     void updateFromNative() {
+        mRS.validate();
+        mName = mRS.nGetName(getID());
     }
 
 }