android开发分享Android内存指南中的“避免dependency injection框架”是否也适用于Dagger?

所以我遇到了有关Android内存性能的最佳实践。

https://developer.android.com/training/articles/memory.html

他们说

避免dependency injection框架

使用Guice或RoboGuice等dependency injection框架可能会很有吸引力,因为它们可以简化您编写的代码,并提供适用于testing和其他configuration更改的自适应环境。 但是,这些框架往往会通过扫描代码来进行注释,从而执行大量的stream程初始化,即使您不需要,也可能需要将大量的代码映射到RAM中。 这些映射的页面被分配到干净的内存中,所以Android可以放弃它们,但是直到页面被长时间留在内存中才会发生。

但是他们自称是匕首的匕首呢? 不知道我应该去哪一个?

    这个build议并不适用于所有的dependency injection框架。

    ..framework [像Guice一样工作]倾向于通过扫描你的代码进行注释来执行很多进程初始化,即使你不需要它,也可能需要大量的代码映射到RAM中

    因此,如果使用扫描所述[运行时间]注释的DI / IoC框架,意味着[过度]使用reflection,则此原因不适用。 虽然匕首确实使用了注释,但这些注释的使用方式不同于 Guice 1,并避免了所述的问题。

    由于Dagger被写为“ Android和Java的快速dependency injection器”,作者为此devise了它,并相信它适合这样一个目标 – 继续尝试。


    1匕首使用编译时注释( 主要是 ),而不是依靠运行时注释和reflection; 这是运行时注释扫描和reflection导致内存指南警告的问题。

    Android团队最近更新了他们的build议, build议开发者使用Dagger 2 。

    以前的build议是基于高昂的反思成本。 由于匕首2不再使用reflection – 匕首1 – 他们相信它可以在Android应用程序中使用,而无需运行成本或内存使用

    (免责声明:我是Dagger 2的团队经理。)

    Dagger的创造者@JakeWharton也写了一个简单的“注射”框架,称为Butterknife

    因为所有的RoboGuice转换者都抱怨Dagger缺乏“视图注入” 。

    你这样使用它:

    class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } } 

      以上就是android开发分享Android内存指南中的“避免dependency injection框架”是否也适用于Dagger?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/515356.html

      (0)
      上一篇 2020年12月1日
      下一篇 2020年12月1日

      精彩推荐