2012-03-30 35 views
11

Tôi gặp sự cố khi làm mới chế độ xem bên trong SlidingTray (tùy chỉnh SlidingDrawer đến từ trên cùng).Stackoverflow: Gây ra bởi các khung nhìn lồng nhau?

Tôi không chắc chắn những gì gây ra nó .. nhưng đoán đầu tiên của tôi là đó là do số lượng bố trí lồng nhau ...

số lượng tối đa bố trí lồng nhau là gì?

Thiết bị có cụ thể không, làm thế nào tôi có thể chắc chắn nếu đó là nguyên nhân?

Nếu không, bất kỳ thứ nào trong số này đang gây ra nó .. là gì?

Các stacktrace:

E/AndroidRuntime(2199): FATAL EXCEPTION: main 
E/AndroidRuntime(2199): java.lang.StackOverflowError 
E/AndroidRuntime(2199): at android.graphics.Paint.measureText(Paint.java:1057) 
E/AndroidRuntime(2199): at android.text.Styled.drawDirectionalRun(Styled.java:267) 
E/AndroidRuntime(2199): at android.text.Styled.measureText(Styled.java:430) 
E/AndroidRuntime(2199): at android.text.Layout.measureText(Layout.java:1655) 
E/AndroidRuntime(2199): at android.text.Layout.getLineMax(Layout.java:689) 
E/AndroidRuntime(2199): at android.text.Layout.draw(Layout.java:340) 
E/AndroidRuntime(2199): at android.text.BoringLayout.draw(BoringLayout.java:365) 
E/AndroidRuntime(2199): at android.widget.TextView.onDraw(TextView.java:4168) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6880) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
E/AndroidRuntime(2199): at android.widget.ScrollView.draw(ScrollView.java:1409) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.buildDrawingCache(View.java:6640) 
E/AndroidRuntime(2199): at android.view.View.getDrawingCache(View.java:6428) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1571) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1392) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
E/AndroidRuntime(2199): at android.widget.ScrollView.draw(ScrollView.java:1409) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6986) 
E/AndroidRuntime(2199): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
E/AndroidRuntime(2199): at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1409) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at com.vodafone.onm.components.SlidingTray.dispatchDraw(SlidingTray.java:426) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
E/AndroidRuntime(2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
E/AndroidRuntime(2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
E/AndroidRuntime(2199): at android.view.View.draw(View.java:6883) 
E/AndroidRuntime(2199): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
E/AndroidRuntime(2199): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java) 

CẬP NHẬT: Hierarchy Viewer Snapshot

.

Một số nghĩ rằng tôi nghĩ có liên quan: http://www.mail-archive.com/[email protected]/msg48036.html

+0

Vui lòng đăng một số mã cho createView hoặc bất cứ điều gì bạn đang làm – jsimpson

+1

Đó là quá nhiều mã: -S, nhưng làm thế nào về ảnh chụp nhanh của trình xem phân cấp? – neteinstein

+1

Chỉ cần chắc chắn rằng bạn không bằng cách nào đó gây ra các cuộc gọi đệ quy trong khi tái chế/vẽ. Nếu bạn không có quá nhiều lượt xem lồng nhau có thể là vấn đề. Đối với giới hạn, nó sẽ phụ thuộc vào kích thước ngăn xếp, và tôi nghĩ rằng đây là phụ thuộc phần vững. – jsimpson

Trả lời

22

số lượng tối đa bố trí lồng nhau là gì?

Không có giá trị cụ thể. Bạn chạy ra khỏi không gian ngăn xếp khi bạn chạy ra khỏi không gian ngăn xếp, và đó sẽ là tùy thuộc vào những gì bạn đang làm. Các chủ đề ứng dụng chính có một ngăn xếp 8KB, cuối cùng tôi nghe nói.

Điều đó đang được nói, nếu Chế độ xem phân cấp hiển thị độ sâu từ 10 trở lên (gốc tới lá sâu nhất), tôi bắt đầu lo lắng và 15 bạn có thể bắt đầu chạy vào ngoại lệ. Hình ảnh của bạn gần như không đọc được, dường như có độ sâu cao hơn đáng kể so với hình ảnh đó.

Bạn dường như có một số lớp bị lãng phí. Nếu bạn có một lớp trong Chế độ xem phân cấp, trên đường dẫn quan trọng, có một phụ huynh và một con, đó là một ứng cử viên chính cần được loại bỏ, vì nó có thể không thêm bất kỳ giá trị nào. Bạn có ít nhất 5 trong số những ứng cử viên này. Thậm chí làm sạch tất cả những điều đó có thể không đủ, nhưng nó là một điểm khởi đầu.

+0

Cảm ơn, tôi đang cố gắng để giảm đến 15 (loại bỏ một số tính năng). Tôi sẽ quay lại khi tôi đã thực hiện nó và kiểm tra nó. – neteinstein

+0

Nó hoạt động. Với 17 lớp chiều sâu nó hoạt động mà không có tai nạn .. nhưng tôi cũng tự hỏi nếu một trong những điều tôi gỡ bỏ cũng giúp trong việc giải quyết crasha. Tôi đã sử dụng view.layout (...) để di chuyển một khung nhìn để mô phỏng một ScrollView (để tạo một Pull to Refresh mà với một khung nhìn cuộn sẽ rất phức tạp). Bạn có bất kỳ manh mối nào nếu điều này cùng với việc làm mới màn hình chuyển động cũng có thể gây ra sự cố như thế không? – neteinstein

+0

@NeTeInStEiN: Tôi không có đầu mối, xin lỗi. – CommonsWare

Các vấn đề liên quan