You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@weex.apache.org by GitBox <gi...@apache.org> on 2018/10/09 03:55:13 UTC

[GitHub] Hanks10100 closed pull request #1607: make APP not crash when onRootCreated called twice

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:
users@infra.apache.org


With regards,
Apache Git Services