Articles of 优化

为什么proguard处理AndroidManifest.xml

我看到一些不明原因的Proguard行为。 AFAIK proguard不注意android清单。 此外,在我的proguard.cfg我没有提及BroadcastReceiver相关的类。 所以我认为这些应该被剥离。 但是我在bin / proguard.txt中看到一些奇怪的东西: # view AndroidManifest.xml #generated:784 -keep class com.fiksu.asotracking.InstallTracking { <init>(…); } 而那个类(BroadcastReceiver的下属)并没有被剥离。 理性对我没有任何意义: [proguard] com.fiksu.asotracking.InstallTracking [proguard] is kept by a directive in the configuration. 如果class级没有在清单中提到,就会被剥离。 很高兴知道为什么。

Android上的OpenGL ES 2.0中的快速dynamic顶点

我想在Android上使用OpenGL ES 2.0批量绘制一堆线,我需要知道最好的方法来做到这一点。 现在我创build了一个名为LineEngine的类,它build立了一个FloatBuffer来绘制所有的顶点,然后一次绘制所有的线。 问题是,显然FloatBuffer.put()是非常慢,吞噬CPU时间像疯了似的。 这是我的class public class LineEngine { private static final float[] IDENTIY = new float[16]; private FloatBuffer mLinePoints; private FloatBuffer mLineColors; private int mCount; public LineEngine(int maxLines) { Matrix.setIdentityM(IDENTIY, 0); ByteBuffer byteBuf = ByteBuffer.allocateDirect(maxLines * 2 * 4 * 4); byteBuf.order(ByteOrder.nativeOrder()); mLinePoints = byteBuf.asFloatBuffer(); byteBuf = ByteBuffer.allocateDirect(maxLines * 2 * 4 * […]

这个方法会被调用吗? (仍然需要一个被接受的答案…详见答案)

TL; DR: 打电话时, onPause方法是否被调用? 我有权限READ_PHONE_STATE,我不想要。 那么,onPause方法是否会在通话中被调用,以便我可以在那里将应用程序静音? private PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { if (doesUserHavePermission()) { if (state == TelephonyManager.CALL_STATE_RINGING) { onPhoneCallInterrupt(); //Method I made that mutes audio for phone call } else if (state == TelephonyManager.CALL_STATE_IDLE) { } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) { onPhoneCallInterrupt(); //Method […]

为什么Android API要求结果参数而不是返回方法?

我的问题是在整个Android API中,很多库调用都要求将results[]parameter passing给方法,例如: public boolean isInProximity(double startLat, double startLongitude, float meters) { float[] results = new float[3]; Location.distanceBetween(startLat, startLongitude, endLatitude, endLongitude, results); return results[0] <= meters; } 对android的调用是Location.distanceBetween() ,它需要results[]为什么他们不包括一个返回签名的方法? 我假设它是某种内存或速度优化。 我不确定背后的确切原因。

Android和iOS上的OpenGL:优化以及它们的不同之处

我正在为Android和iPhone编写一个OpenGL ES 1.1应用程序。 OpenGL ES引擎位于共享库中,可通过Android上的NDK访问。 我正在寻找优化我的OpenGL性能。 有很多video和资源,例如: ngmoco’s Tim Omernick on Optimizing OpenGL for iPhone http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40008793-CH105 http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html OpenGL ES 2.0:寻求许多移动顶点的VBO性能/优化技巧 什么时候VBO比“简单”的OpenGL原语(glBegin())更快? https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips 但通常有一些普遍适用的众所周知的技术,例如: 使用顶点缓冲对象(VBOs) 最小化OpenGL状态更改 在可能的地方使用纹理atlassing,以避免select许多不同的纹理 有些技术可能会或者可能会对它们的细节更加敏感,Android和iPhone可能会有所不同,这就是我所感兴趣的。例如: 交错你的顶点数据在每个顶点:例如顶点坐标; 纹理坐标; 正常。 在交错中是否有优先顺序的项目? 将每个顶点填充到若干字节的下一个倍数。 我看到32号队伍,但也有一些地方看到4或8。 考虑对每个顶点的坐标使用一个短的或类似的,而不是一个浮点数 所以我的问题是:有什么更详细的魔术优化,如上面的最后一个列表Android和iPhone不同? 他们在哪里不一样,最好的策略是什么? 只要用一个适合两个世界的价值? (根据平台在运行时间微调这些细节可能有点超过顶部?)

通过Java List进行高效循环

下面的列表来自于2008年的谷歌I / O谈话中称为“Dalvik虚拟机内部”的一系列方法,从一系列对象循环到最低效率: (1) for (int i = initializer; i >=0; i–) //hard to loop backwards (2) int limit = calculate_limit(); for (int i= 0; i< limit; i++) (3) Type[] array = get_array(); for (Type obj : array) (4) for (int i =0; i< array.length; i++) //gets array.length everytime (5) for (int i=0; i < […]

为什么有时候这不起作用?

TL; DR我有很多button,我正在交换他们的图像。 出于某种原因,我的代码只适用于某些手机,而不适用于其他手机。 我的应用程序使用以下代码比较imagebuttons上的图像: onCreate : redsquare = getResources().getDrawable(R.drawable.redsquare); bitred = ((BitmapDrawable) redsquare).getBitmap(); onClick ( v是点击的button) ClickGround = v.getBackground(); //Get the background of button clicked //the bitmap background of the button clicked BitClick = ((BitmapDrawable) ClickGround).getBitmap(); 然后,在onClick后面,我检查用户是否点击了redSquare: if (BitClick == bitred) { //Make sure it is the red square that user clicked } 我已经在我的模拟器和华为手机上进行了testing,效果很好。 当我在另一部手机(LG […]

Android性能 – “避免内部获取者/设置者”

只要在开发者网站上阅读: 避免内部获得者/设置者 在像C ++这样的本地语言中,通常使用getter(例如i = getCount())而不是直接访问字段(i = mCount)。 对于C ++来说,这是一个很好的习惯,因为编译器通常可以内联访问,如果需要限制或debugging字段访问,则可以随时添加代码。 在Android上,这是一个坏主意。 虚拟方法调用比实例字段查找更昂贵。 遵循通用的面向对象的编程实践是合理的,并且在公共接口中有getter和setter,但是在一个类中你总是应该直接访问字段。 没有JIT,直接字段访问比调用一个简单的getter快3倍。 使用JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用一个简单的getter快7倍。 这在Froyo中是正确的,但是当JIT使用getter方法的时候将会有所改进。 所以它是说你会在类中使用字段访问: public class MyObject { public Object innerObject; // This would be private if I was using a getter public void doSomeStuff(){ if(innerObject){ // Within class access like this // …. } } public Object getInnerObject(){ // This would […]

Android上的OrmLite Proguard

我应该如何使用Android上的ormlite库使用proguard? 尝试这个: -keep class com.j256.** -keepclassmembers class com.j256.** -keep enum com.j256.** -keepclassmembers enum com.j256.** -keep interface com.j256.** -keepclassmembers interface com.j256.** 但是我得到: 03-23 20:23:54.518:E / AndroidRuntime(3032):java.lang.RuntimeException:无法启动活动ComponentInfo {cz.eman.android.cepro / cz.eman.android.cepro.activity.StationsOverviewActivity}:java .lang.IllegalStateException:找不到辅助类class kb的Context参数的构造函数 我也试着添加这个: -keepclassmembers class * { public <init>(android.content.​Context); } 但是我又得到了另外一个class级的错误。

如何优化android webview中的渲染速度

有没有可能在webview中提高渲染速度? 使用简单的innerHTML,尽pipejs渲染需要几ms,但需要接近1秒来显示内容。 使用IOS,即使使用较less的高性能硬件,完全相同的代码也可以快速而完美地运行。 testingAndroid:2.3,3.2,4.0(Desire HD,Galaxy Nexus,Galaxy Tab)IOS:4,5(iPhone 3gs,4) 感谢任何有用的回应!