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的任何人都可以提供有关您在应用程序中执行操作的任何信息吗?你是否在"登录"中没有单身对象?图表?
答案 0 :(得分:12)
解决方案非常简单,您只需执行一次“加”操作并将新对象图存储在其他位置(可能是应用程序类),但我想知道这是否是一种好方法?
是的。只要用户登录并且流程处于周围状态,登录图的生命周期就需要生存。由于活动的生命周期非常短暂,因此这不是一个好地方。
我以它为例,使用他们熟悉的东西让人们更容易理解这个概念。
来自Square的任何人都可以提供有关您在应用程序中执行操作的任何信息吗?
所有与UI无关的图表都由Application
类管理。通过这个,我们保证它创建一次,首先创建,并且只有在进程死亡时才会消失。
任何与UI相关的内容(活动范围图,片段范围图等)都会随着用户界面的出现而增加。