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

Reply via email to