Jake Wharton在2013年Devoxx的演讲中,谈到了使用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();
}
});
}
}
然而,如果注入的用户作为@Singleton进行范围限定,则其属性将在配置更改时消失(因为对象图在onCreate中创建)。
解决方案非常简单,您只需执行此“加”操作一次,并将新的对象图存储在其他地方(例如应用程序类)即可,但我想知道这是否是一个好方法? Square的任何人都可以提供有关您在应用程序中所做的操作的见解吗?您是否只是在“已登录”图形中没有单例对象?