如何在三星手机上停止过多的对象创建?

the*_*osh 9 performance android garbage-collection samsung-mobile

我在许多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)  
Run Code Online (Sandbox Code Playgroud)

当用户触摸屏幕时,这会创建数千个Rect和Point对象.

有没有人知道一个解决方法?

我不是针对三星手机或使用他们的sdks或库.

Abh*_*hra 0

好吧,有一种设计模式在这种情况下发挥作用,称为享元模式。不确定这是否对您有帮助,如果客户端代码在您的控制之下,如果是的话,而不是制作新对象,使用相同的对象,并将对象的属性(例如 Rect 将具有 x,y 坐标)存储在数组中的 client 对象,并调用 Rect 对象的 draw 方法,传递存储在 client 数组中的 rect 对象的坐标。