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.

Le jeudi 28 juin 2012 15:58:53 UTC+2, MagouyaWare a écrit :
>
> Nope... http://lmgtfy.com/?q=android+viewholder+pattern
>
> Thanks,
> Justin Anderson
> MagouyaWare Developer
> http://sites.google.com/site/magouyaware
>
>
> On Thu, Jun 28, 2012 at 7:50 AM, jean-francois garreau <
> 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.**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<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<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<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=**
>>> W251bGwsMSwyLDEsImNvbS5iaW5vbW**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
>> 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
>>
>
>

-- 
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