Articles of 性能

电晕performance?

我和我的团队正在开发一款使用corona sdk的游戏,我们的游戏应该可以在iPhone和Android设备上运行。 当使用android sdk 2.2进行testing时,虽然我们遵循所有内存pipe理步骤并避免了有关全局variables,定时器,转换,显示对象等的泄漏,但性能似乎很差。 有没有人有这样的性能问题的想法? 当在网上search最多的时候说这是一个corona内部的bug。

性能:如何防止requestLayout()布局整个层次结构

我有一个非常复杂的android应用程序。 尽可能地将视图层次化,但我仍然在应用程序中滞后。 例如,有一个菜单项可以通过由ValueAnimator设置高度来折叠/展开。 通常情况下,animation在第一次运行时有一点滞后,并且在第一次通过之后平滑。 我注意到,当我在Menu-Item上调用“requestLayout()”时,Android似乎做了布局传递和多个度量传递整个层次结构。 因为我知道虽然菜单项(视图)改变高度,菜单(视图)本身没有,有没有办法告诉这个应用程序? 我可以以某种方式执行这个第一遍,似乎滞后于自己,以便它在应用程序启动后发生,而不是在第一次触摸input? 这是我正在做的animation的草图:

在eclipse的DDMS视angular中无法select我的Android客户端

我想检查我的程序代码耗时的操作。 我认为DDMS是实现这一目标的最佳工具。 但是,我不能看到线程,堆等。 它告诉我select一个客户端。 但是我不知道除了“设备”选项卡之外哪个地方不起作用。 我需要做什么? 有没有可能对我的亚行设置错误(但LogCat工作正常)? 谢谢!

Android最终variables

我正在阅读的TextView的源代码,我遇到了这个代码片段: RectF mTmpRectF = new RectF(); float[] mTmpOffset = new float[2]; ExtractedTextRequest mExtracting; final ExtractedText mTmpExtracted = new ExtractedText(); 所以,他们在那里将mTmpExtracted定义为final,而不是mTmpRectF。 我已经读过这个“最终”如果你把它放在一个variables之前做什么? 哪里有分析何时使用final。 因此,既然这两个对象(mTmpRectF&mTmpExtracted)在这个特定情况下可能是最终的,那么是否还有其他原因(即,性能等),只有一个被设置为final或者只是一个开发者代码风格? 谢谢!

导航抽屉速度慢,视图复杂

在我的应用程序我使用导航抽屉,它工作得很好。 但是,如果要显示的片段包含很多TextView,ImageView和布局,当我点击该项目时,视图是毛刺的。 我会改善这个滞后。 我的Galaxy Nexus和Nexus 4的效果是一样的,所以我认为问题是我在同一时间有2个命令。 //On item click – First comand (Close Drawer) mDrawerList.setItemChecked(position, true); setTitle(mStringTitles[position]); mDrawerLayout.closeDrawer(mDrawerView); // Second comand (Replace Fragment) getFragmentManager() .beginTransaction() .replace(R.id.firts_view, new FragmentNew()) .commit(); 所以我想我会在菜单closures后立即更换这个片段..有什么想法?

内存泄漏的实际例子

我一直在努力识别内存泄漏。 我想我的项目循环进度视图中有几个内存泄漏。 我的猜测之一是我有内部类FadeRunnable内存泄漏。 但说实话,我不知道如何确定这是否是问题的根源。 那么,当我做通常的情况下,切换方向,我看到增加的内存使用情况如下所示。 如果我注释掉FadeRunnable类的用法,步骤会更小( 但仍然存在,所以我想这不是唯一的泄漏 ) 一旦我分析堆转储,我看到一些东西。 但实际上我不知道这些价值是什么意思。 我做的事情是 多次改变方向 打开堆转储并按“保留大小” 现在当我点击“CircularProgressView”时,我在右边看到了8行,我想这意味着有8个“CircularProgressView”实例泄漏,并且在内存中孤立地存在。 它是否正确? 如果是这样,我怎么能find转储信息( 我猜在下面的窗格中的某个地方 )保存/保存此对象的位置。 我很想有一个一步一步的解释如何找出是否和哪个对象泄漏一些内存。 所有怀疑视图的代码都可以在这个类中find。 https://github.com/momentummodules/CircularProgressView/blob/master/circularprogressview/src/main/java/momentum/circularprogressview/CircularProgressView.java 但也可以随时查看完整的项目,以获得更深入的洞察力,如果你想玩它。 提前致谢! UPDATE 上面的代码链接显示了mem-leaking内部类的固定代码。 下面的代码片段显示了永远不会这样使用的原始的泄漏代码 /** * Mem-leaking code, for fixed code see repository link * https://github.com/momentummodules/CircularProgressView/blob/master/circularprogressview/src/main/java/momentum/circularprogressview/CircularProgressView.java */ public class CircularProgressView extends View { … private Thread fadeThread = null; … … class FadeRunnable […]

提高Android上OpenGL ES填充率的技巧

在我的dynamic壁纸,我正在绘制覆盖整个屏幕的3纹理四边形。 在Nexus One上,我得到了40fps。 我正在寻找提高性能的方法。 四边形被混合在一起,纹理从RGB_8888位图加载。 1024×1024是纹理。 我有 glDisable(GL_DITHER); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); glDisable(GL10.GL_LIGHTING); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 我试过的东西都是40fps: 将纹理尺寸减小到512×512和256×256 使用draw_texture扩展 禁用混合 将纹理过滤从GL_LINEAR更改为GL_NEAREST 使用VBOs(绝望的尝试,因为只有三个四边形…) 在独立活动中运行绘图代码(如果某个活动壁纸会影响性能) 如果我画2层而不是3层,fps上升到45左右,然后画1层看到fps上升到55.我想我受限于填充率,因为closures和潜在的昂贵的function导致相同的FPS,而似乎改善FPS的唯一的东西只是画less… 我正在考虑纹理压缩的想法,但支持不同的压缩格式似乎并不好玩。 ETC1没有我需要的alpha通道,我不确定是否PVRTC和ATITC甚至可以从Java和OpenGL ES 1.0或1.1中使用。 我很乐意听到有关其他方面的想法。 如果有用的话,我可以指出当前版本的壁纸和截图。

XML驱动的graphics用户界面和性能

阅读XML布局的在线开发人员指南页面 ,我发现以下语句: 你的UI描述是你的应用程序代码的外部,这意味着你可以修改或修改它,而不必修改你的源代码并重新编译。 我知道XML布局和资源的许多优点,但是由于XML文件放置在APK中,我认为没有真正的方法来修改GUI而不重新打包。 我的意思是,我们大多数人使用eclipse ADT插件和ANT来打包应用程序,所以在编译类文件时没有真正的收获(因为在修改资源文件之后,开发者将不得不重新打包应用程序并生成新的APK文件)。 因此,无需重新部署整个APK,就无法在设备上重新部署GUI。 如果这个假设是真实的,那么XML文件将在APK文件的生命周期中是相同的。 我猜这些文件(特别是布局的)必须在运行时(在一个activity的onCreate之前)被parsing和处理,这比以编程方式构buildGUI的效率要低(就像在Swing中一样)。 布局通常不是一个瓶颈,但如果我是正确的,我会看到在这里可以更好地使用(例如,与animation)的一个小浪费时间。 阅读同一页面,它说: 在编译应用程序时,每个XML布局文件都被编译到一个View资源中。 检查我的一个APK,我一直在寻找一个预编译的文件在classes.dex ,除了我的java类和R.class文件外,没有什么东西。 布局XML文件位于/res/layout folder ,并且有一个名为resources.arsc的文件,它似乎包含有关其他资源(string,图标名称)的信息,但没有任何与Views相关的信息,我认为(纠正我,米错)。 我的问题: XML布局文件是否预编译,以及哪个文件? 如果没有,是否有一个编译选项将布局信息完全预编译到文件中以加快载入时间? (理想情况下,这将是一个类文件) 如果没有,是否有办法在第一次执行时创build该文件并将其caching在应用程序安装文件夹中,以便后续的运行时执行可以读取该文件而不是parsingXML,并具有更快的加载时间? 提前致谢。

改变标签是缓慢/滞后 – 使用片段

我有一个使用标签的活动,标签切换片段。 问题在于Fragment在创build时需要几秒钟才能加载,因此切换标签的时间大约为1或2秒。 要解决这个问题,我一直在试图find一种方法来显示一个简单的加载graphics,甚至是一个进度对话框,以便该选项卡立即改变,并显示一些东西指示事情正在加载,直到一切完成。 我的片段的onCreateView方法如下所示: FrameLayout fl; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fl = (FrameLayout) inflater.inflate(R.layout.text_layout, container, false); doHeavyStuff(); return fl; } 我尝试把doHeavyStuff()放在onStart()但是没有任何帮助。 而线程不会帮助,因为doHeavyStuff()涉及操纵视图/ GUI。 任何想法如何显示片段,并显示“加载”信息, 而其他一切都加载? 谢谢! 马特。

android-什么是消息队列原生轮询一次在android中?

我知道线程有消息队列和处理程序推动runnables或消息,但当我剖析我的android应用程序使用android studio工具有以下过程: android.os.MessageQueue.nativePollOnce 其中使用CPU比其他更多。 这是什么,我怎样才能减lessCPU的时间呢? 这里是剖析器工具的图像结果