-
Notifications
You must be signed in to change notification settings - Fork 254
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
性能测试疑问 #48
Comments
系统Activity XML解析是一个io操作,它需要从存储卡上的apk中提取XML文件到内存中并显式进行反射调用,此时影响该操作的时间的主要因素有,提取xml文件的大小,反射的性能,存储卡上apk文件的解压速度即apk大小、内容复杂度。在demo中由于原apk比较简单,大小较小,反射性能也较好,所以其性能提升并不明显。如果要完整的测试性能,需要在真实的项目中进行测试。我们的测试测试结果是基于实际项目进行的。 |
在一些低端机真实项目上测试下来,性能几乎没有提升,xml加载耗时50-80ms浮动,x2c加载耗时50-70浮动,能给一个你们的测试xml试试吗? |
我在项目中添加,测试,加载耗时也没有增加很多,有的机型甚至更为耗时。这个 200% 缺少一些数据支撑。 |
List<Object> list = new ArrayList<>();
current = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
list.add(new TextView(this));
}
Log.d("Hans", "new:" + (System.currentTimeMillis() - current));
list.clear();
try {
Class<?> textViewClass = Class.forName("android.widget.TextView");
Constructor constructor = textViewClass.getConstructor(Context.class);
current = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
list.add(constructor.newInstance(this));
}
Log.d("Hans", "newInstance:" + (System.currentTimeMillis() - current));
list.clear();
} catch (Exception ignored) {
}
实际测试中,貌似 newInstance 的性能比直接 new 性能更好? |
没有冒犯的意思。只是在想如果对性能提升很有效,Google为什么不去做这件事~ |
Google没有做或者没有及时做的事情多了。android最开始没有MultiDex的时候,不是大家各显神通去分包、插件化的吗。 这个问题写个简单的布局和测试代码验证一下即可。测试的效果和布局复杂度以及加载的测试的加载次数有关,我个人做了一组测试,不到10个节点加载100次,inflate的时间大概是代码的的2倍。次数放大到1000,差距更大。 |
Google有意识到这个问题。 |
google实际已经意识到xml解析布局对性能的影响,所以已经做了一些优化,比如xml文件预加载到内存,xml反射类时会缓存View的构造函数。比较new和newInstance的性能对讨论X2C没有意义。 |
其实时间不在new 或者 newInstance上,耗时主要在加载xml->解析,这个步骤耗时,耗性能。 |
您好,我在app demo的基础上修改了 layout 下面的 activity_main_inter.xml 文件,把它替换成一个比较复杂的 XML 文件进行测试;在 ActivityX2C 文件的 X2C.setContentView 前后打印时间,并在 ActivityXML 文件的 setContentView 前后打印时间,然后比较两个时间,发现 X2C 方式的时间反而比 XML 方式的时间要多。我是在Android Studio debug模式下测试的。
请问您能分享一下你们测试X2C性能的Case 或者测试方法,感谢~~
The text was updated successfully, but these errors were encountered: