当我启动我的RoboGuice安卓应用程序时,下面的消息会出现在日志中:
Roboguice.RoboGuice:使用完全反射。尝试使用RoboGuice注释处理器以获得更好的性能。
这意味着什么?
我的所有活动(包括我的MainActivity)都是从RoboGuice类扩展的。也许我遗漏了一些东西,并且有一种改进RoboGuice性能的方法,而我目前并没有这样做。
备注:我使用的是RoboBlender
发布于 2015-08-02 15:14:50
RoboGuice基于Google 盖斯库,这是一个基于反射的依赖注入框架.不幸的是,Guice在Android上表现不佳。例如,在我最近的项目中,初始化注入器所用的时间为1到1.5秒。
在某个时候,RoboGuice开发人员决定通过在编译时做一些工作来提高他的库的性能,这就是RoboBlender的意义所在。它在编译时创建一个注释数据库,RoboGuice在运行时使用它来搜索注入点。您可以阅读更多关于RoboBlender 这里的内容。这种方法需要在Guice中进行大量更改,因此RoboGuice作者不得不对其进行分叉,甚至向Guice发送拉请求。但是这个PR被拒绝了,主要是因为它与Guice库(作为一个运行时DI框架)的思想相矛盾。
很抱歉做了这么长的介绍,下面是你问题的答案。在调用RoboGuice.setUseAnnotationDatabases(false)时,您要求RoboGuice通过反射在运行时处理所有事情。换句话说,RoboGuice就像原始Guice一样工作,而且速度并不快。当您试图使用注释数据库而应用程序崩溃时,可能会发生这种情况,因为无法找到注释数据库。也许你忘了把<meta-data android:name="roboguice.annotations.packages" android:value="..."/>添加到AndroidManifest.xml
最后,我不建议您在Android上使用Guice或RoboGuice,因为前者非常慢,而后者被设计破坏了。使用编译时DI库(如短剑 )要好得多,而且切换到它不需要花费太多时间。
发布于 2016-04-26 14:14:32
Roboguice现在移到4.0.0版。这在github上是可用的,作为分支rg-4-final。在gradle中,您可以使用它作为
compile 'org.roboguice:roboguice:4.0.0'
provided 'org.roboguice:roboblender:4.0.0'我以前对让机器人搅拌机工作有问题,但在4.0.0中,它就像一种魅力。
不过还是有变化的。看看Astroboy的例子,了解如何使用它。如果不再扩展活动或片段,就会将成员注入其中的每一个,如下所示:
RoboGuice.getInjector(this).injectMembers(this);他们放弃了@InjectView和@InjectResource,你现在用蝴蝶刀注入视图,用正常的安卓方式获得资源。不要忘记在应用程序中初始化Roboguice:
RoboGuice.setupBaseApplicationInjector(this, new MyModule(), new OtherModule());享受吧!
发布于 2015-07-11 16:52:04
我建议你用蝴蝶刀。如果您使用android,它也有插件,只需单击一次就可以生成自动视图注入,这要容易得多:
https://stackoverflow.com/questions/31359318
复制相似问题