You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/03/11 21:44:02 UTC

[royale-asjs] branch develop updated: Basic-Dynamic-IR-classes: All this base classes need to remove listeners to avoid dp hang and cause memory leak. Plus clean and organize imports

This is an automated email from the ASF dual-hosted git repository.

carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 38c54eb  Basic-Dynamic-IR-classes: All this base classes need to remove listeners to avoid dp hang and cause memory leak. Plus clean and organize imports
38c54eb is described below

commit 38c54eb31050315594f7e1826478247ecf1bba57
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Wed Mar 11 22:43:53 2020 +0100

    Basic-Dynamic-IR-classes: All this base classes need to remove listeners to avoid dp hang and cause memory leak. Plus clean and organize imports
---
 .../DynamicAddItemRendererForArrayListData.as      |  9 ++++++---
 .../DynamicItemsRendererFactoryForArrayListData.as | 22 ++++++----------------
 ...cRemoveAllByNullItemRendererForArrayListData.as |  5 ++---
 ...DynamicRemoveAllItemRendererForArrayListData.as | 17 +++++++++++------
 .../DynamicRemoveItemRendererForArrayListData.as   | 13 ++++++-------
 .../DynamicUpdateItemRendererForArrayListData.as   |  7 ++++++-
 6 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
index 8ea2247..0bdc70b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
@@ -29,8 +29,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.sendStrandEvent;
 
 	/**
-	 * Handles the adding of an itemRenderer once the corresponding datum has been added
-	 * from the IDataProviderModel.
+	 *  Handles the adding of an itemRenderer once the corresponding datum has been added
+	 *  from the IDataProviderModel.
 	 *
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.2
@@ -52,13 +52,16 @@ package org.apache.royale.html.beads
 		}
 
 		private var dp:IArrayList;
-		
 		/**
 		 *  @private
 		 *  @royaleemitcoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override protected function dataProviderChangeHandler(event:Event):void
 		{
+			if(dp)
+			{
+				dp.removeEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded);
+			}
 			dp = dataProviderModel.dataProvider as IArrayList;
 			if (!dp)
 				return;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
index 99a8c9a..bab5d61 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
@@ -19,27 +19,14 @@
 package org.apache.royale.html.beads
 {
     import org.apache.royale.collections.IArrayList;
-    import org.apache.royale.core.IBead;
-    import org.apache.royale.core.IDataProviderItemRendererMapper;
-    import org.apache.royale.core.IDataProviderModel;
-    import org.apache.royale.core.IItemRendererClassFactory;
-    import org.apache.royale.core.IItemRendererOwnerView;
-    import org.apache.royale.core.IIndexedItemRendererInitializer;
-    import org.apache.royale.core.IListPresentationModel;
     import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.ISelectionModel;
-    import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IIndexedItemRendererInitializer;
+    import org.apache.royale.core.IItemRendererOwnerView;
     import org.apache.royale.core.IStrandWithModelView;
-    import org.apache.royale.core.SimpleCSSStyles;
-    import org.apache.royale.core.UIBase;
-    import org.apache.royale.core.ValuesManager;
     import org.apache.royale.events.CollectionEvent;
     import org.apache.royale.events.Event;
-    import org.apache.royale.events.EventDispatcher;
     import org.apache.royale.events.IEventDispatcher;
     import org.apache.royale.html.beads.IListView;
-    import org.apache.royale.utils.loadBeadFromValuesManager;
-    import org.apache.royale.core.DispatcherBead;
     import org.apache.royale.utils.sendStrandEvent;
 
     /**
@@ -60,7 +47,6 @@ package org.apache.royale.html.beads
         }
 
         private var dp:IArrayList;
-        
 		/**
 		 * @private
          * @royaleignorecoercion org.apache.royale.core.IListPresentationModel
@@ -68,6 +54,10 @@ package org.apache.royale.html.beads
 		 */
         override protected function dataProviderChangeHandler(event:Event):void
         {
+            if(dp)
+			{
+				dp.removeEventListener(CollectionEvent.ITEM_ADDED, itemAddedHandler);
+			}
             dp = dataProviderModel.dataProvider as IArrayList;
             if (!dp)
                 return;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
index 4dd9227..ff24bab 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
@@ -23,11 +23,10 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IStrandWithModelView;
-	import org.apache.royale.events.CollectionEvent;
+	import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.html.beads.IListView;
+	import org.apache.royale.html.beads.IListView;
 
 	/**
 	 * Handles the removal of all itemRenderers once data source is being set to null.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
index 0a4563f..b4eb23b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
@@ -23,15 +23,15 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IStrandWithModelView;
+	import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.html.beads.IListView;
+	import org.apache.royale.html.beads.IListView;
 
 	/**
-	 * Handles the removal of all itemRenderers once the all items has been removed
-	 * from the IDataProviderModel.
+	 *  Handles the removal of all itemRenderers once the all items has been removed
+	 *  from the IDataProviderModel.
 	 *
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.2
@@ -89,13 +89,18 @@ package org.apache.royale.html.beads
 			dataProviderChangeHandler(null);
 		}
 		
+		private var dp:IEventDispatcher;
 		/**
 		 * @private
 		 *  @royaleemitcoercion org.apache.royale.events.IEventDispatcher
 		 */
 		protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
+			if(dp)
+			{
+				dp.removeEventListener(CollectionEvent.ALL_ITEMS_REMOVED, handleAllItemsRemoved);
+			}
+			dp = dataProviderModel.dataProvider as IEventDispatcher;
 			if (!dp)
 				return;
 			
@@ -104,7 +109,7 @@ package org.apache.royale.html.beads
 		}
 
 		/**
-		 * Handles the itemRemoved event by removing the item.
+		 *  Handles the allItemsRemoved event by removing the item.
 		 *
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
index 0ead9d1..3a87b31 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
@@ -18,13 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IIndexedItemRenderer;
 	import org.apache.royale.core.IItemRendererOwnerView;
-	import org.apache.royale.core.IParent;
-	import org.apache.royale.core.ISelectionModel;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
@@ -54,14 +49,18 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		
+		private var dp:IEventDispatcher;
 		/**
 		 * @private
 		 *  @royaleemitcoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
+			if(dp)
+			{
+				dp.removeEventListener(CollectionEvent.ITEM_REMOVED, handleItemRemoved);
+			}
+			dp = dataProviderModel.dataProvider as IEventDispatcher;
 			if (!dp)
 				return;
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
index 220155e..3cdc7aa 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
@@ -51,12 +51,17 @@ package org.apache.royale.html.beads
 		{
 		}
 		
+		private var dp:IEventDispatcher;
 		/**
 		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
+			if(dp)
+			{
+				dp.removeEventListener(CollectionEvent.ITEM_UPDATED, handleItemUpdated);
+			}
+			dp = dataProviderModel.dataProvider as IEventDispatcher;
 			if (!dp)
 				return;