ClientSocketAi2ext : How to save socket connection if you move between screen.

288 views
Skip to first unread message

fabrizio farina

unread,
Jun 22, 2018, 1:42:45 PM6/22/18
to MIT App Inventor Forum
Hi Guys.  
I'm just approaching Ai2 environment and I need help on using ClientSocketAi2Ext. I need to maintain an open connection with a server that send back to the client spontaneous events in json format.   I experienced that if I change screen and than come back to the main screen,   I do not receive anymore events.  I need to "reconnect" to the server,  but on server side I noted that the previous connection is still open, so there are  two active connection. Of Course if I change the screen again, come back and then reconnect again,  it works,  but I have 3 active connection running, and so no.  
I dont' know how exactly it work,  but it seems like in the screen changes I lost the reference instance of the first original socket connection and the event handler is not able anymore to receive the data. 
unfortunately I cannot close the connection before change the screen and then reopen it when initialize main screen,  because the extension has probably  a  bug in "disconnect" method,  that results in a crash of the app (and,  for what I googled,  there is no strong support on the extension)    
Is there any way to "save" the original socket reference? Any suggestion how I can solve ? 

thanks in advance.  
Fabrizio 

Taifun

unread,
Jun 22, 2018, 2:10:52 PM6/22/18
to MIT App Inventor Forum
did you consider to use only one screen?
see also tip 1 here

  1. Use different screens wisely
    Before starting to create another screen, first you should think about is it really necessary? See also Building apps with many screens and SteveJG's post about advantages/disadvantagesbecause in only one screen you also can use vertical arrangements to simulate different screens, just set the arrangements to visible = true/false as needed... See also Martyn_HK's example about how to use Tabs in App Inventor and another example from Cyd

    If you decided to use different screens, then you should switch them correctly, else you will run out of memory after a while...      
    The recommended method of switching screens in App Inventor

  2. App Inventor works best if you use images whose size matches the size you want them to appear on your screen. If you import larger images into your app, your app may run out of system memory. Using Images with App Inventor

    by Italo: First, you need to understand that the file size of an image is not the amount of memory it uses when it's being displayed. The file size is the compressed size, much like a zip or rar file. When viewed, the image needs to be decompressed.
    For example, if your image says its file size is 100 kb, and its dimensions are 1024 x 768, 32 bit color, then that image uses over 3 mb of RAM (not 100 kb!) when you show it on the screen. ((1024 * 768 ) * 32) / 8 = 3,145,728 kb (3 mb)
    Now, this is a mistake most people make when using arrangements as "virtual screens": They set different image components with their images loaded but hidden, instead of having only one image component and changing the picture according to the user's selection or app events, not knowing that apparently the hidden image components are also using the ram, (yes, even though they are invisible!).

  3. Avoid redundancy
    Probably it helps to read chapter 19 - 21 in Dave's book http://www.appinventor.org/book2 to get an idea how to do DRY programming with App Inventor - Don't repeat yourself 

  4. See SteveJG's monster list of tips and tricks

  5. How to overcome the App Inventor project limit of 10 MB

  6. Backup your project frequently
Taifun

Trying to push the limits of App Inventor! SnippetsTutorials and Extensions from Pura Vida Apps by  Taifun. 


Reply all
Reply to author
Forward
0 new messages