当我启动Roboguice Android应用程序时,日志中会显示以下消息:
机器人指南。机器人指南:使用全反射。尝试使用roboguice注释处理器以获得更好的性能。
这是什么意思?
我的所有活动(包括我的主要活动)都来自机器人指南课程。也许我漏掉了一些东西,有一种方法可以提高我目前没有做的机器人指南的性能。
注:我用的是Roboblender
最佳答案
roboguice基于googleGuice库,这是一个基于反射的依赖注入框架。不幸的是,guice在android上的表现并不好。例如,在我最近的项目中,初始化一个注入器需要1到1.5秒。
在某个时刻,roboguice开发人员决定通过在编译时做一些工作来提高他的库的性能,这就是roboblender的目的。它在编译时创建一个注释数据库,roboguice在运行时使用这个数据库来搜索注入点。您可以阅读更多关于roboblenderhere的信息。这种方法需要在guice中进行很多更改,因此roboguice的作者不得不使用fork,甚至向guice发送了pull request。但是这个pr之所以被拒绝,主要是因为它与guice库(作为运行时di框架)的思想相矛盾。
很抱歉这么长的介绍,这里是你问题的答案。当调用RoboGuice.setUseAnnotationDatabases(false)
时,您要求roboguice通过反射在运行时处理所有事情。换言之,roboguice的工作原理和原始guice一样,但速度不是很快。当您尝试使用注释数据库时,应用程序可能会崩溃,因为找不到注释数据库。也许你忘了把<meta-data android:name="roboguice.annotations.packages" android:value="..."/>
添加到AndroidManifest.xml
?
最后,我不建议你在android上使用guice或roboguice,因为前者速度非常慢,而后者是被设计破坏的。最好使用编译时di库,比如Dagger,并且切换到它不需要太多时间。
关于java - RoboGuice:使用全反射。尝试使用RoboGuice注释处理器以获得更好的性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31359318/