I already saw that presentation and I can't use the ViewHolder pattern because i need a customView.
So I'm looking for a way to optimize my CustomView because I don't know what I'm doing wrong with this view that causing thoses GC.... Le lundi 2 juillet 2012 18:11:32 UTC+2, Daniel Drozdzewski a écrit : > > On 2 July 2012 12:20, jean-francois garreau < > jean.francois.garr...@gmail.com> wrote: > >> little Up beacause not fixed >> >> Le jeudi 28 juin 2012 16:12:35 UTC+2, jean-francois garreau a écrit : >>> >>> The problem is : as I'm creating my custom view heriting from View, I >>> don't have any findById so the pattent viewHolder won't be useFull for me :( >>> >>> And I'm already implemnting it with the view recycling view system. >>> Indeed, in my View I use some Paint elements that I keep in the instance of >>> my view. >>> >>> > You have to refactor your code, so that you use all suggested > optimisations out there, but HolderPattern is a must. Recycling view > objects is build into the ListView, so use it, or be slow. Creating new > view object per item is going to hurt. > > Just read some articles, watch Romain Guy talks from Google IO and see > where you have gone wrong. > http://www.youtube.com/watch?v=N6YdwzAvwOA > http://www.vogella.com/articles/AndroidListView/article.html > > Daniel > > > > > > >> Le jeudi 28 juin 2012 15:58:53 UTC+2, MagouyaWare a écrit : >>>> >>>> Nope... >>>> http://lmgtfy.com/?q=android+**viewholder+pattern<http://lmgtfy.com/?q=android+viewholder+pattern> >>>> >>>> Thanks, >>>> Justin Anderson >>>> MagouyaWare Developer >>>> http://sites.google.com/site/**magouyaware<http://sites.google.com/site/magouyaware> >>>> >>>> >>>> On Thu, Jun 28, 2012 at 7:50 AM, jean-francois garreau < >>>> jean.francois.garreau@gmail.**com <jean.francois.garr...@gmail.com>>wrote: >>>> >>>>> You mean : >>>>> >>>>> >>>>> >>>>> public View getChildView(int groupPosition, int childPosition, boolean >>>>> isLastChild, View convertView, ViewGroup parent) { >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> ObjectSubViewNew subView = null; >>>>> >>>>> >>>>> >>>>> if (convertView == null) { >>>>> >>>>> >>>>> subView = new ObjectSubViewNew(mainContext, kmUnit); >>>>> >>>>> >>>>> } else { >>>>> >>>>> >>>>> subView = (ObjectSubViewNew) convertView; >>>>> >>>>> >>>>> } >>>>> >>>>> >>>>> .... >>>>> } >>>>> >>>>> >>>>> >>>>> ? >>>>> >>>>> >>>>> Le jeudi 28 juin 2012 14:27:14 UTC+2, jean-francois garreau a écrit : >>>>> >>>>>> 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.**ExpandableListV**iew 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.**ExpandableList**Position >>>>>> comming from getRecycleCreate the stack is : >>>>>> >>>>>>> android.widget.**ExpandableListP**osition getRecycledOrCreate >>>>>>> ExpandableListPosition.java 121 false >>>>>>> android.widget.**ExpandableListP**osition obtain >>>>>>> ExpandableListPosition.java 107 false >>>>>>> android.widget.**ExpandableListC**onnector$**PositionMetadata obtain >>>>>>> ExpandableListConnector.java 988 false >>>>>>> android.widget.**ExpandableListC**onnector getUnflattenedPos >>>>>>> ExpandableListConnector.java 176 false >>>>>>> android.widget.**ExpandableListC**onnector getItemViewType >>>>>>> ExpandableListConnector.java 464 false >>>>>>> android.widget.AbsListView$**Rec**ycleBin 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$**Fli**ngRunnable 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.**ExpandableListV**iew 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.**ExpandableLis**tPosition >>>>>> - 81 are coming from : java.lang.ref.SoftReference >>>>>> AND java.lang.ref.**WeakReferenc**e >>>>>> >>>>>> 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/**Cin**eShowTime-Android/blob/**master/** >>>>>> Libraries/CineShowTime/**src/**com/binomed/showtime/**android/** >>>>>> layout/view/**ObjectSubViewNew.**java<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/**Cin**eShowTime-Android/blob/**master/** >>>>>> Libraries/CineShowTime/**src/**com/binomed/showtime/**android/** >>>>>> layout/view/**ObjectMasterView.**java<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/**Cin**eShowTime-Android/blob/**master/** >>>>>> Libraries/CineShowTime/**src/**com/binomed/showtime/**android/** >>>>>> adapter/view/**AbstractResultAda**pter.java<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/**stor**e/apps/details?id=com.* >>>>>> *binomed.**showtime&feature=**search_**result#?t=** >>>>>> W251bGwsMSwyLDEsImNv**bS5iaW5vbW**VkLnNob3d0aW1lIl0.<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 android-developers@** >>>>> googlegroups.com <android-developers@googlegroups.com> >>>>> To unsubscribe from this group, send email to >>>>> android-developers+**unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> >>>>> For more options, visit this group at >>>>> http://groups.google.com/**group/android-developers?hl=en<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 android-developers@googlegroups.com >> To unsubscribe from this group, send email to >> android-developers+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en > > > > > -- > Daniel Drozdzewski > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en