我在许多Android三星手机上的动画速度有问题。我已经追踪了这个问题,垃圾收集太多了。但是,我的代码没有直接创建任何对象。
这是来自DDMS中的分配跟踪器的堆栈跟踪。
at com.samsung.android.multiwindow.MultiWindowStyle$1.createFromParcel(MultiWindowStyle.java:493)
at com.samsung.android.multiwindow.MultiWindowStyle$1.createFromParcel(MultiWindowStyle.java:491)
at com.samsung.android.multiwindow.IMultiWindowFacade$Stub$Proxy.getMultiWindowStyle(IMultiWindowFacade.java:499)
at com.samsung.android.multiwindow.MultiWindowFacade.getMultiWindowStyle(MultiWindowFacade.java:81)
at android.app.Activity.getMultiWindowStyle(Activity.java:4681)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1688)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1264)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6614)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
at android.view.Choreographer.doCallbacks(Choreographer.java:613)
at android.view.Choreographer.doFrame(Choreographer.java:583)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5678)
当用户触摸屏幕时,这会创建数千个Rect和Point对象。
有人知道解决方法吗?
我不是针对三星手机或使用他们的sdks或库。
答案 0 :(得分:0)
嗯,有一个设计模式发挥作用,我们用于这样的情况,称为飞重模式。如果客户端代码在您的控制之下,不确定这是否有帮助,如果是,而是使新对象使用相同的对象,并且对象的属性(例如,Rect将具有x,y坐标)存储在数组中的客户端对象,并在Rect对象上调用draw方法,传递存储在客户端数组中的rect对象的坐标。