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

