Usually the best thing you can do for scroll performance of a list is to
implement view recycling... Are you doing that?

Thanks,
Justin Anderson
MagouyaWare Developer
http://sites.google.com/site/magouyaware


On Thu, Jun 28, 2012 at 6:27 AM, jean-francois garreau <
[email protected]> wrote:

> Hi everyone,
>
> I have a problem for optimzing my application. More particulary, an
> ExpandListView. I found the scroll animation pretty slow compare to what I
> can see on other application. I have done severals optimizations yet but
> now I'm faced to a lack of idea for have a fluent scroll...
>
> What have done :
>
>    1. First i start to create CustomView inherting from View
>    2. I saw that in log I have lots of GC
>    3. I have use allocationTracket in DDMS in order to see what are the
>    object created who could cause my GC
>    4. I identify lots of instanciations of String so I've modify my model
>    in order to carry all the string i need in order to avoid new creations of
>    String
>    5. I also try to write a reusable object corresponding to a drawable
>    instruction in order to skim throught all instruction during the draw 
> method
>
>
> In order to gives you all information for helping me with my code, here is
> a litle piece of functionnal.
>
> My app is an application which gives you the movies showtimes near your
> position. The expand list show thoses informations :
>
>      *Name Cinema :                                           [Image]*
>      distance
>
> ------------------------------------------------------------------------------------------
>                 *Movie Name 1 :* time
>                 passed time 1 | passed time 2 | *nearest time* |
>                 futur time 1 | futur time 2
>
> -------------------------------------------------------------------------
>                 *Movie Name 2 :* time
>                 passed time 1 | passed time 2 | *nearest time* |
>                 futur time 1 | futur time 2
>
> -------------------------------------------------------------------------
>
>
> etc.
>
> As you can see, on each movie I list all showtimes for the cinema and I
> have a diferent display according to the current time
>
> In term of Model Object, I have this structure in my adapter :
>
> ArrayList<TheaterBean> theaterList; // The list of my cinema
> HashMap<String, Movie> mapMovie; // An hashmap which gives me the movie
> corresponding to an id
>
>
> The problem I'm facing now is that when i look at the log, I still have
> lots of GC... and when i looked to the allocationTracker i see that :
>
> In first position comes android.graphic.Bitmap from method nativeCreate
> and it's corresponding stack is :
>
>> android.graphics.Bitmap nativeCreate Bitmap.java -2 true
>> android.graphics.Bitmap createBitmap Bitmap.java 477 false
>> android.view.View buildDrawingCache View.java 6599 false
>> android.view.View getDrawingCache View.java 6450 false
>> android.view.ViewGroup drawChild ViewGroup.java 1571 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.widget.AbsListView dispatchDraw AbsListView.java 1545 false
>> android.widget.ListView dispatchDraw ListView.java 3138 false
>> android.widget.ExpandableListView dispatchDraw ExpandableListView.java
>> 229 false
>> android.view.View draw View.java 7008 false
>> android.widget.AbsListView draw AbsListView.java 2669 false
>> android.view.ViewGroup drawChild ViewGroup.java 1646 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.view.ViewGroup drawChild ViewGroup.java 1644 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.view.ViewGroup drawChild ViewGroup.java 1644 false
>
>
> In second position comes lots of  android.widget.ExpandableListPosition
> comming from getRecycleCreate the stack is :
>
>> android.widget.ExpandableListPosition getRecycledOrCreate
>> ExpandableListPosition.java 121 false
>> android.widget.ExpandableListPosition obtain ExpandableListPosition.java
>> 107 false
>> android.widget.ExpandableListConnector$PositionMetadata obtain
>> ExpandableListConnector.java 988 false
>> android.widget.ExpandableListConnector getUnflattenedPos
>> ExpandableListConnector.java 176 false
>> android.widget.ExpandableListConnector getItemViewType
>> ExpandableListConnector.java 464 false
>> android.widget.AbsListView$RecycleBin getScrapView AbsListView.java 4603
>> false
>> android.widget.AbsListView obtainView AbsListView.java 1465 false
>> android.widget.ListView makeAndAddView ListView.java 1745 false
>> android.widget.ListView fillDown ListView.java 670 false
>> android.widget.ListView fillGap ListView.java 641 false
>> android.widget.AbsListView trackMotionScroll AbsListView.java 3497 false
>> android.widget.AbsListView$FlingRunnable run AbsListView.java 2994 false
>> android.os.Handler handleCallback Handler.java 587 false
>> android.os.Handler dispatchMessage Handler.java 92 false
>> android.os.Looper loop Looper.java 130 false
>> android.app.ActivityThread main ActivityThread.java 3835 false
>
>
> After I have lots of java.lang.ref.SoftReference comming from
> buildDrawingCache, the stack is :
>
>> android.view.View buildDrawingCache View.java 6602 false
>> android.view.View getDrawingCache View.java 6450 false
>> android.view.ViewGroup drawChild ViewGroup.java 1571 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.widget.AbsListView dispatchDraw AbsListView.java 1545 false
>> android.widget.ListView dispatchDraw ListView.java 3138 false
>> android.widget.ExpandableListView dispatchDraw ExpandableListView.java
>> 229 false
>> android.view.View draw View.java 7008 false
>> android.widget.AbsListView draw AbsListView.java 2669 false
>> android.view.ViewGroup drawChild ViewGroup.java 1646 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.view.ViewGroup drawChild ViewGroup.java 1644 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.view.ViewGroup drawChild ViewGroup.java 1644 false
>> android.view.ViewGroup dispatchDraw ViewGroup.java 1373 false
>> android.view.ViewGroup drawChild ViewGroup.java 1644 false
>
>
> To resume for 512 allocations :
>
>    -  67 are coming from : android.graphics.Bitmap
>    - 300 are coming from : android.widget.ExpandableListPosition
>    - 81 are coming from : java.lang.ref.SoftReference
>    AND java.lang.ref.WeakReference
>
> So I have no idea on how to solve my problem... If you have a new device
> you would probably don't see the lag effect I mention. For my tests I'm
> using a SGS. But with the emulator we can observe the GCs
>
> All the code is available here :
>
>
> https://github.com/binomed/CineShowTime-Android/blob/master/Libraries/CineShowTime/src/com/binomed/showtime/android/layout/view/ObjectSubViewNew.java
> for the child view
>
> https://github.com/binomed/CineShowTime-Android/blob/master/Libraries/CineShowTime/src/com/binomed/showtime/android/layout/view/ObjectMasterView.java
> for the group view
>
> https://github.com/binomed/CineShowTime-Android/blob/master/Libraries/CineShowTime/src/com/binomed/showtime/android/adapter/view/AbstractResultAdapter.java
> for the adpater (It's an utlity class but we find the sames methods as in
> ExpandableAdapter)
>
> the curent version on market only have the optimization of CustomView. :
> https://play.google.com/store/apps/details?id=com.binomed.showtime&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5iaW5vbWVkLnNob3d0aW1lIl0.
>
>
> I'm open to all new idea for making my application faster :)
>
> Maybe by not invoking the requestLayout each time I set a movie but each
> time a scroll is ended ?
>
> If you have any question don't hesitate.
>
> regards
>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to