square - Android 中的 Dagger 作用域

标签 square dagger

Jake Wharton 在 Devoxx 2013 上的演讲,使用 Dagger 构建 Android 应用程序,谈到了仅为登录用户创建 Dagger 范围。这种事情听起来很干净,我想在我的应用程序中这样做。

谈话中讨论的代码大致如下:

public class LoggedInActivity extends Activity {

    @Inject User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logged_in);

        DaggerScopesApp app = (DaggerScopesApp) getApplication();
        app.getObjectGraph().plus(new UserModule("exampleusername")).inject(this);

        findViewById(R.id.do_something_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(LoggedInActivity.this, user.username + " : " +
                        user.someValue++, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

但是,如果注入(inject)的用户被限定为@Singleton,那么它的属性将在配置更改时消失(因为对象图是在 onCreate 中创建的)。

解决方案非常简单,您只需执行一次“加号”操作并将新对象图存储在其他位置(可能是应用程序类),但我想知道这是否是一个好方法? Square 的任何人都可以提供有关您在应用程序中所做工作的任何见解吗?您只是在“登录”图中没有单例对象吗?

最佳答案

The solution is pretty simple, you can just do this "plus" operation once and store the new object graph somewhere else (maybe the application class), but I was wondering if this is a good approach?



是的。登录图的生命周期需要在用户登录并且进程存在的情况下存在。由于事件的生命周期非常短,所以这不是一个好地方。

我用它作为一个例子来让人们使用他们熟悉的东西来简化这个概念。

Can anyone from Square can provide any insight into what you do in your applications?



所有未绑定(bind)到 UI 的图表都由 Application 管理。类(class)。通过这一点,我们可以保证它被创建一次,首先被创建,并且只有在进程终止时才会消失。

随着 UI 的出现和消失,任何与 UI 相关的内容(事件范围图、片段范围图等)都会在这些之上加上。

关于square - Android 中的 Dagger 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902869/

相关文章:

java - Dagger-2 的空指针异常(android)

dagger - 当你 "include"来自 Dagger 中另一个模块的模块时会发生什么?

java - Square Tape file backed queue 可以从 android 的主线程使用吗?

ios - Swift - 强制从库和相机中获取方形照片

android-studio - 在 Dagger2 中查找提供者的便捷方式

android - Dagger 和数据绑定(bind)

java - Dagger 2,MVVM : Adding a third tab and going back and forth crashes the app

android - 带有 RxJava2 的 espresso 自定义 TestRunner - 使用 Rx2Idler 获取空指针异常

java - 仅使用整数计算 2^n%k

java - 在外部库中启用日志记录