Hi Koders.
I have an app for yoga practice. Each yoga pose (asana) of each sessions is configured with a Dynamic card view that has inside several elements, labels, images and arrangements, all of them dynamic elements:
Each session has a dictionary where the keys are the order of each element and the values are the code for each asana and the session is loaded with a “for each order in list”, where this list is the keys of the dictionary. The value of each singular element is stored in a TinyDB using a code and are loaded in a certain order so each asana looks like in the previous image.
But when the session is quite large, the app crashes when loading it. My device has 4Gb of RAM and sometimes it crashes, sometimes not, I guess that with less RAM the problem will be worse.
How can I solve this problem?
I tried changing the “for each” method to a iterating process where the first item of the order list is deleted each time and when the list lenght is 0 the process stops, but it crashes either.
It looks good, but it makes me to rebuild almost half of the blocks of the app because everything is done with Yusuf Cihan dynamic components. I will look into it.
I read that the extension builds elements so fast because it renders only the elements visible in the screen. In my app you can change the order of the elements, delete any or add new ones, does the extension work nice with this issues?
For example, I can move a component five positions up or down and then automatically there is a scroll to the new position of the moved item, will this work with this extension?
Thanks.
Dynamic component will gets slower whenever there is huge data. I have not tried the method you said with this extension. Let me try it later and will let you know. I hope add and dele possible but moving from place to place … …
If you wanna Dyna component to load faster to some extent then do not use Dyna creation for the whole procedure ,just use procedure of procedure
Yeah sure . See the link attached in my previous reply. Where I would have created multiple buttons with this extension. Once created multiple buttons upon clicking the selective button it will pop up with I’d of the button
In bind you must set up id for every component using the tag. That’s all
Then I only have to change the way that elements are created (using this extension) and not rebuild the rest of blocks that use Yusuf Cihan Dynamic components, is that correct?
Ok, so I will give it a try and see.
Thanks!
EDIT: Not good for me. This extension is good when all the components are generic, but I can’t use the order to asign the id, for example, because every element have a specific id and I don’t know how manage the data. Plus order can be changed when editing the session and other elements could be added or deleted, so I think it won’t work right for me.
11-18 20:26:25.181 28861 28861 E ActivityThread: Activity io.kodular.jcmarquitecto.Yd54_Loading.Screen1 has leaked IntentReceiver com.google.appinventor.components.runtime.Network$1@6e80cd that was originally registered here. Are you missing a call to unregisterReceiver()?
11-18 20:26:25.181 28861 28861 E ActivityThread: android.app.IntentReceiverLeaked: Activity io.kodular.jcmarquitecto.Yd54_Loading.Screen1 has leaked IntentReceiver com.google.appinventor.components.runtime.Network$1@6e80cd that was originally registered here. Are you missing a call to unregisterReceiver()?
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:1821)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:1552)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1762)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ContextImpl.registerReceiver(ContextImpl.java:1728)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ContextImpl.registerReceiver(ContextImpl.java:1716)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:736)
11-18 20:26:25.181 28861 28861 E ActivityThread: at com.google.appinventor.components.runtime.Network.<init>(SourceFile:65)
11-18 20:26:25.181 28861 28861 E ActivityThread: at java.lang.reflect.Constructor.newInstance0(Native Method)
11-18 20:26:25.181 28861 28861 E ActivityThread: at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
11-18 20:26:25.181 28861 28861 E ActivityThread: at gnu.expr.PrimProcedure.apply(PrimProcedure.java:272)
11-18 20:26:25.181 28861 28861 E ActivityThread: at gnu.mapping.CallContext.runUntilDone(CallContext.java:234)
11-18 20:26:25.181 28861 28861 E ActivityThread: at gnu.mapping.CallContext.runUntilValue(CallContext.java:298)
11-18 20:26:25.181 28861 28861 E ActivityThread: at gnu.kawa.reflect.Invoke.applyN(Invoke.java:209)
11-18 20:26:25.181 28861 28861 E ActivityThread: at gnu.mapping.ProcedureN.apply2(ProcedureN.java:39)
11-18 20:26:25.181 28861 28861 E ActivityThread: at io.kodular.jcmarquitecto.Yd54_Loading.Screen1.$define(Screen1.yail:10254)
11-18 20:26:25.181 28861 28861 E ActivityThread: at com.google.appinventor.components.runtime.Form.onCreateFinish(SourceFile:483)
11-18 20:26:25.181 28861 28861 E ActivityThread: at com.google.appinventor.components.runtime.Form.onCreate(SourceFile:403)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.Activity.performCreate(Activity.java:8130)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.Activity.performCreate(Activity.java:8110)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1343)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3975)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2377)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.os.Handler.dispatchMessage(Handler.java:106)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.os.Looper.loopOnce(Looper.java:233)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.os.Looper.loop(Looper.java:344)
11-18 20:26:25.181 28861 28861 E ActivityThread: at android.app.ActivityThread.main(ActivityThread.java:8204)
11-18 20:26:25.181 28861 28861 E ActivityThread: at java.lang.reflect.Method.invoke(Native Method)
11-18 20:26:25.181 28861 28861 E ActivityThread: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589)
11-18 20:26:25.181 28861 28861 E ActivityThread: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071)
probably there is an error in your blocks?
however let me suggest you to follow the advice by @Still-learning and use a RecyclerList
I don’t have a database, the data is stored in TinyDB for each component. When an element is created, the specific value is loaded from TinyDB, using as tag the id of the main element attached to a word. For example, for the name of the asana, the tag for the TinyDB value will be “01004Name” where 01 is the code for the session, 004 the code for the asana and Name the kind of data to be loaded.
The elements are created with Dynamic component, then assigned the properties with a dictionary and assigned the value with TinyDB, one after the other with a “for each” method, but with this extension the elements seems to be created all at the same time and assigned the values after that, and I don’t know exactly how to handle that, but I can intuit it can be done, but I have to try and spend more time on it.
If you don’t mind, I’ll ask you concrete questions as the doubts appears.
Thanks.