8

मेरे पास एक कस्टम व्यू समूह है। उस कस्टम व्यू समूह में कई कस्टम दृश्य हैं। कस्टम विचार सभी एक दूसरे को लेआउट में ओवरलैप करते हैं।अमान्य 1 कस्टम व्यू एक दृश्य समूह में सभी कस्टम दृश्यों को अमान्य करने का कारण बनता है?

अतिव्यापी विचार "परतें" बनाने के लिए आवश्यक हैं। तो एक परत कुछ स्थैतिक सामग्री बना सकती है, लेकिन एक और स्तरित दृश्य अलग एनिमेटेड सामग्री बनाता है। समस्या तब आती है जब मैं किसी अन्य थ्रेड से .postInvalidate को एक दृश्य पर कॉल करता हूं जो मूल रूप से एक एनीमेशन है जो 60FPS पर चलता है। स्तरित दृश्यों के बाहर 60FPS डिवाइस का उपयोग कर रहा है (गैलेक्सी एस 3)।

इस कस्टम व्यू समूह के अंदर, .invalidate 2 हार्डवेयर प्रस्तुत किए गए दृश्यों में से 1 को अमान्य करने का कारण बनता है, और कुछ सॉफ़्टवेयर दृश्य इसके साथ अमान्य होने का कारण बनता है।

MyCustomViewThatShouldNotInvalidate(AbstractDialLayer).onDraw(Canvas) line: 68  
MyCustomViewThatShouldNotInvalidate.onDraw(Canvas) line: 79  
MyCustomViewThatShouldNotInvalidate(View).draw(Canvas) line: 13650  
MyCustomViewThatShouldNotInvalidate(View).draw(Canvas, ViewGroup, long) line: 13534  
MyCustomViewGroup(ViewGroup).drawChild(Canvas, View, long) line: 2938  
MyCustomViewGroup(ViewGroup).dispatchDraw(Canvas) line: 2808  
MyCustomViewGroup(View).buildDrawingCache(boolean) line: 12909  
MyCustomViewGroup(View).getDisplayList(DisplayList, boolean) line: 12580  
MyCustomViewGroup(View).getDisplayList() line: 12645 
RelativeLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
RelativeLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
RelativeLayout(View).getDisplayList() line: 12645  
RelativeLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
RelativeLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
RelativeLayout(View).getDisplayList() line: 12645  
NoSaveStateFrameLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
NoSaveStateFrameLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
NoSaveStateFrameLayout(View).getDisplayList() line: 12645  
ViewPager(ViewGroup).dispatchGetDisplayList() line: 2920  
ViewPager(View).getDisplayList(DisplayList, boolean) line: 12537  
ViewPager(View).getDisplayList() line: 12645  
LinearLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
LinearLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
LinearLayout(View).getDisplayList() line: 12645  
RelativeLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
RelativeLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
RelativeLayout(View).getDisplayList() line: 12645  
NoSaveStateFrameLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
NoSaveStateFrameLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
NoSaveStateFrameLayout(View).getDisplayList() line: 12645  
LinearLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
LinearLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
LinearLayout(View).getDisplayList() line: 12645  
LongPressGestureDetectingFrameLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
LongPressGestureDetectingFrameLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
LongPressGestureDetectingFrameLayout(View).getDisplayList() line: 12645  
FrameLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
FrameLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
FrameLayout(View).getDisplayList() line: 12645  
LinearLayout(ViewGroup).dispatchGetDisplayList() line: 2920  
LinearLayout(View).getDisplayList(DisplayList, boolean) line: 12537  
LinearLayout(View).getDisplayList() line: 12645  
CustomViewAbove(ViewGroup).dispatchGetDisplayList() line: 2920  
CustomViewAbove(View).getDisplayList(DisplayList, boolean) line: 12537  
CustomViewAbove(View).getDisplayList() line: 12645  
SlidingMenu(ViewGroup).dispatchGetDisplayList() line: 2920  
SlidingMenu(View).getDisplayList(DisplayList, boolean) line: 12537  
SlidingMenu(View).getDisplayList() line: 12645  
PhoneWindow$DecorView(ViewGroup).dispatchGetDisplayList() line: 2920  
PhoneWindow$DecorView(View).getDisplayList(DisplayList, boolean) line: 12537  
PhoneWindow$DecorView(View).getDisplayList() line: 12645  
HardwareRenderer$Gl20Renderer(HardwareRenderer$GlRenderer).draw(View, View$AttachInfo,   HardwareRenderer$HardwareDrawCallbacks, Rect) line: 1170  
ViewRootImpl.draw(boolean) line: 2275  
ViewRootImpl.performDraw() line: 2147  
ViewRootImpl.performTraversals() line: 1958  
ViewRootImpl.doTraversal() line: 1112  
ViewRootImpl$TraversalRunnable.run() line: 4474  
Choreographer$CallbackRecord.run(long) line: 725  
Choreographer.doCallbacks(int, long) line: 555  
Choreographer.doFrame(long, int) line: 525  
Choreographer$FrameDisplayEventReceiver.run() line: 711  
Handler.handleCallback(Message) line: 615  
Choreographer$FrameHandler(Handler).dispatchMessage(Message) line: 92  
Looper.loop() line: 137  
ActivityThread.main(String[]) line: 4918  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not   available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 1004  
ZygoteInit.main(String[]) line: 771  
NativeStart.main(String[]) line: not available [native method]  
+1

क्या आपके पास कोई कोड है जिसका उपयोग इसे पुन: बनाने के लिए किया जा सकता है? –

उत्तर

1

दृश्य पर अमान्य दृश्य दृश्य पदानुक्रम में अपने माता-पिता को अमान्य कॉल को चेन करेगा। यदि यह हार्डवेयर त्वरित है, तो यह हार्डवेयर रेंडरर क्लास में ध्वज के आधार पर सब कुछ अमान्य कर सकता है। यह एक अनुकूलन है। आप अमान्य कार्यान्वयन की जांच कर सकते हैं। यहां प्रासंगिक कॉल का एक लिंक दिया गया है - Invalidate() -check for hardware acceleration

यह सुनिश्चित करने के लिए, आप उस एप्लिकेशन में अपने डिवाइस पर HardwareRenderer.RENDER_DIRTY_REGIONS के मान की जांच कर सकते हैं।

संबंधित मुद्दे