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

Posted

技术标签:

【中文标题】如何停止在三星手机上创建过多的对象?【英文标题】:How to stop excessive Object creation on Samsung phones? 【发布时间】:2015-01-28 18:51:53 【问题描述】:

我遇到了许多 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 对象。

有人知道解决方法吗?

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

【问题讨论】:

三星的多窗口(多任务)支持似乎已激活。也许您可以强制您的应用告诉三星设备为您的应用禁用多窗口支持。不要回复我..我不熟悉三星多窗口功能。见***.com/questions/14111052/… @theJosh,你有没有进一步了解这个问题? @Tenfour04 不,我离得不近。三星是我的克星。 也许你在某处泄露了一些 UI 视图?或者使用重绘它的自定义视图?没有代码/应用程序示例,这只是猜测 你能展示一下onTouch方法吗?还是处理输入的方法? 【参考方案1】:

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

【讨论】:

以上是关于如何停止在三星手机上创建过多的对象?的主要内容,如果未能解决你的问题,请参考以下文章

一解锁手机屏幕上就出现抱歉,进程"com.android.systemui"已停止运行,怎么办

手机微信内打开网页链接如何做到自动唤醒外部浏览器打开

手机闪退怎么办?

怎么处理SQL Server数据库占用过多内存

在智能手机上停止下载图像

如何解决SQLServer占内存过多的问题