Hanks10100 closed pull request #1607: make APP not crash when onRootCreated 
called twice
URL: https://github.com/apache/incubator-weex/pull/1607
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java 
b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index 475991efe0..7307a28edd 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -1379,6 +1379,9 @@ public void setBundleUrl(String url){
 
   public void onRootCreated(WXComponent root) {
     this.mRootComp = root;
+    if(root.getHostView().getParent()!=null && root.getHostView().getParent() 
instanceof RenderContainer){
+      
((RenderContainer)root.getHostView().getParent()).removeView(root.getHostView());
+    }
     mRenderContainer.addView(root.getHostView());
     setSize(mRenderContainer.getWidth(),mRenderContainer.getHeight());
   }
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java 
b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
index 616e8c9e39..8cd1740ee6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
@@ -200,6 +200,9 @@ private static Object dispatchCallModuleMethod(@NonNull 
WXSDKInstance instance,
     }
   }
 
+  public static WXModule findModule(String instanceId, String moduleStr) {
+    return findModule(instanceId, moduleStr, null);
+  }
 
 
   private static WXModule findModule(String instanceId, String 
moduleStr,ModuleFactory factory) {
@@ -217,6 +220,9 @@ private static WXModule findModule(String instanceId, 
String moduleStr,ModuleFac
       wxModule = moduleMap.get(moduleStr);
       if (wxModule == null) {
         try {
+          if (factory == null) {
+            factory = sModuleFactoryMap.get(moduleStr);
+          }
           wxModule = factory.buildInstance();
           wxModule.setModuleName(moduleStr);
         } catch (Exception e) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java 
b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
index 6bb1feba50..6ccd7030e4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -558,12 +558,16 @@ private boolean warmUpTextLayoutCache(Layout layout) {
 
   @Override
   public void destroy() {
+    removeTypefaceObserver();
+    super.destroy();
+  }
+
+  private void removeTypefaceObserver() {
     if (WXEnvironment.getApplication() != null && mTypefaceObserver != null) {
       WXLogUtils.d("WXText", "Unregister the typeface observer");
       
LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).unregisterReceiver(mTypefaceObserver);
       mTypefaceObserver = null;
     }
-    super.destroy();
   }
 
   private void registerTypefaceObserverIfNeed(String desiredFontFamily) {
@@ -575,13 +579,14 @@ private void registerTypefaceObserverIfNeed(String 
desiredFontFamily) {
       return;
     }
     mFontFamily = desiredFontFamily;
-    if (mTypefaceObserver != null) {
+    if (mTypefaceObserver != null || TypefaceUtil.isFontLoaded(mFontFamily)) {
       return;
     }
 
     mTypefaceObserver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
+        removeTypefaceObserver();
         String fontFamily = intent.getStringExtra("fontFamily");
         if (!mFontFamily.equals(fontFamily)) {
           return;
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java 
b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
index 11f58cb0d7..d551c086e3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
@@ -47,6 +47,12 @@
 
   public static final String ACTION_TYPE_FACE_AVAILABLE = 
"type_face_available";
 
+  public static boolean isFontLoaded(String fontFamily){
+    if(!sCacheMap.containsKey(fontFamily)) return false;
+    FontDO fontDO = sCacheMap.get(fontFamily);
+    return fontDO.getState() == FontDO.STATE_SUCCESS;
+  }
+
   public static void putFontDO(FontDO fontDO) {
     if (fontDO != null && !TextUtils.isEmpty(fontDO.getFontFamilyName())) {
       sCacheMap.put(fontDO.getFontFamilyName(), fontDO);
@@ -112,7 +118,7 @@ public static Typeface getOrCreateTypeface(String family, 
int style) {
     return Typeface.create(family, style);
   }
 
-  private static void loadFromAsset(FontDO fontDo,String path){
+  private static void loadFromAsset(final FontDO fontDo,final String path){
     try {
       Typeface typeface = 
Typeface.createFromAsset(WXEnvironment.getApplication().getAssets(), path);
       if (typeface != null) {
@@ -124,6 +130,14 @@ private static void loadFromAsset(FontDO fontDo,String 
path){
       } else {
         WXLogUtils.e(TAG, "Font asset file not found " + fontDo.getUrl());
       }
+      WXSDKManager.getInstance().getWXRenderManager().postOnUiThread(new 
Runnable() {
+        @Override
+        public void run() {
+          Intent intent = new Intent(ACTION_TYPE_FACE_AVAILABLE);
+          intent.putExtra("fontFamily", fontDo.getFontFamilyName());
+          
LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).sendBroadcast(intent);
+        }
+      }, 100);
     } catch (Exception e) {
       WXLogUtils.e(TAG, e.toString());
     }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to