Android中的Dagger范围

时间:2014-04-07 02:55:16

标签: 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();
            }
        });
    }
}

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

解决方案很简单,你可以这样做"加上#34;操作一次并将新对象图存储在其他地方(可能是应用程序类),但我想知道这是否是一个好方法? Square的任何人都可以提供有关您在应用程序中执行操作的任何信息吗?你是否在"登录"中没有单身对象?图表?

1 个答案:

答案 0 :(得分:12)

  

解决方案非常简单,您只需执行一次“加”操作并将新对象图存储在其他位置(可能是应用程序类),但我想知道这是否是一种好方法?

是的。只要用户登录并且流程处于周围状态,登录图的生命周期就需要生存。由于活动的生命周期非常短暂,因此这不是一个好地方。

我以它为例,使用他们熟悉的东西让人们更容易理解这个概念。

  

来自Square的任何人都可以提供有关您在应用程序中执行操作的任何信息吗?

所有与UI无关的图表都由Application类管理。通过这个,我们保证它创建一次,首先创建,并且只有在进程死亡时才会消失。

任何与UI相关的内容(活动范围图,片段范围图等)都会随着用户界面的出现而增加。