I agree with Jude on the AMF, I was gonna suggest the same thing. Sometimes
if bandwidth is a real problem, you can benefit from adding a PHP layer
between whatever server you are targeting and your mobile app just to get
AMF. I've done a huge mobile app in the past using that technique, and
never got complaints about connectivity though it was almost exclusively
used outside.

>From a user standpoint, always show the busy indicator when the app is
talking to the server, let the user know something is going on, that also
makes a difference.

For every view, optimize your calls, only get what you need, and only send
up what has changed.

Good luck.

*Lionel*

On Thu, Jun 27, 2013 at 5:07 AM, jude <[email protected]> wrote:

> Hi Mark,
>
> Is it limited to bandwidth issues? Can you save and reuse a local copy of
> the array collection (s) before going with a local database? I haven't had
> to sync to databases before so I'll leave that to someone else but for the
> other areas if they have to do with the array collections, there's a couple
> of things you can to improve performance, most of which I'm sure you are
> already aware of.
>
> If you know or can limit the query to the server to get only the records
> that have changed since the last sync and you've already populated the
> array collection then once you get those records you can iterate over them
> and call itemUpdated if they already exist.
>
> // loop through and find the items that need updating
> var item = collection.findItemByID(id); // find the items that changed
> // call item updated on each
> filteredCollection.itemUpdated(itemThatChanged, "@value");
>
> // when you're done call refresh
> filteredCollection.refresh();
>
>
> If you are updating a lot of items or if those items use databinding then
> you can disable auto update :
>
> filteredCollection.disableAutoUpdate();
>
> // update items in the collection
>
> filteredCollection.enableAutoUpdate();
>
> When using removeAll() on an array collection can be slow sometimes. This
> is because it is has to remove any listeners added through databinding. See
> this [1]. If you are using databinding in item renderers substitute each
> binding with direct assignments in the set data function.
>
> So do this:
>
>             override public function set data(item:Object):void {
>                 super.data = item;
>                 if (labelDisplay && item) labelDisplay.text =
> item.property;
>
> instead of this:
>
> <s:Label text="{data.property}" />
>
> Use AMF when sending data back and forth between the server. JSON data
> might be faster and more compact than XML. I think you said you're sending
> remote objects already.
>
>
> [1]
>
> http://stackoverflow.com/questions/5286326/flex-arraycollection-removeall-vs-new-arraycollection
>
> On Mon, Jun 24, 2013 at 1:49 PM, Mark Fuqua <[email protected]> wrote:
>
> > I am looking for some architectural guidance.
> >
> >
> >
> > I developed a mobile application using Flex mobile.  It is not very
> usable.
> > This is no fault of Flex, it is the way I designed it.  The application
> is
> > a
> > task management application with lots of data exchange with a remote
> > server.
> >
> >
> >
> >
> > During development, it worked OK.some forms were slow to get required
> data,
> > but all in all, being a business application with a captive audience, it
> > was
> > usable.  However, during real world testing, it was obviously deficient,
> > especially in areas with a weak signal.  It is not usable in its present
> > form.
> >
> >
> >
> > I have two main issues.the first is, I need to run the application with a
> > local sqlite database and synch in the background.  I really don't know
> the
> > right way to do this.  But I am thinking the steps are something like the
> > following:
> >
> >
> >
> > 1.            Add two columns to the required database tables:
> > CreatedTimeStamp and MostRecentEditTimeStamp
> >
> > 2.            Write a script that creates a blank database when the app
> is
> > initially run, which matches the database tables required on the remote
> > database (about 15 tables).  Most of the remote tables have
> auto-increment
> > primary keys, so I guess just numeric primary key on the phone.
> >
> > 3.            Connect to the database and create ArrayCollections for
> each
> > of the database tables.
> >
> > 4.            Loop over theArrayCollections and add the data to the
> SQLite
> > database tables.
> >
> > 5.            Then, as the user works with the application, change all my
> > remote objects to SQLite queries populating the existing
> ArrayCollections,
> > for the existing forms and lists, which should eliminate the remoteObject
> > latency/failures that plague the current version.
> >
> > 6.            Change all the add/edit functions to include added/edited
> > timestamps (to the CreatedTimeStamp and MostRecentEditTimeStamp columns
> > mentioned above).
> >
> > 7.            When the sync occurs, download all newly added records from
> > the various tables ( I guess in an order that doesn't violate foreign key
> > constraints).
> >
> > 8.            Upload any newly created records from the phone to the
> remote
> > database.
> >
> > 9.            Download any edited records changed since last sync to the
> > phone.
> >
> > 10.          Upload any edited records changed on the phone since the
> last
> > sync.
> >
> >
> >
> > I am not even going to mention the second issue just yet.this is the big
> > one
> > and quite a stretch for a hack like me.
> >
> >
> >
> > Any guidance, advice, or shortcuts would be greatly appreciated.
> >
> >
> >
> > Mark Fuqua
> >
> >
> >
> > [email protected]
> >
> >
> >
> > 2301 Mount Carmel Road
> >
> > Parkton,  MD  21120
> >
> > (410) 215-7356
> >
> >
> >
> > www.availdata.com
> >
> >
> >
> >
>

Reply via email to