首先从我的项目体系结构开始,我使用MVP和Dagger 2进行依赖注入。使用范围匕首避免活动泄漏2
我一直在探索范围匕首,我的问题是更好地理解活动范围内的范围。
尽管使用活动范围,但我有一个活动(视图)通过演示者泄漏。
由于我是匕首的新手,我觉得我失去了一些东西。
我假设范围应该处理我的视图为null当活动被破坏(虽然现在不知道它将如何)。是我的假设是正确的?如果是的话我做错了什么,否则是否有可能避免使用匕首查看泄漏?我知道detachView的方法,只是好奇,如果我们可以用匕首2实现同样的事情。
P.S:我通过leakCanary了解了泄漏。
以下是我的代码
LoginActivity.class
public class LoginActivity extends BaseActivity implements LoginContract.View {
private static final String TAG = "LoginActivity";
@Inject
LoginPresenter presenter;
private LoginComponent loginComponent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
createComponent();
initViews();
}
private void createComponent() {
loginComponent = ((MyApplication) getApplication()).getRepositoryComponent()
.COMPONENT(new LoginPresenterModule(this));
loginComponent.inject(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
loginComponent = null;
}
LoginPresenterModule.class
@Module
public class LoginPresenterModule {
private final LoginContract.View view;
public LoginPresenterModule(LoginContract.View view) {
this.view = view;
}
@Provides
@ActivityScoped
public LoginContract.View providesView(){
return view;
}
}
LoginComponent.class
@ActivityScoped
@Subcomponent(modules = LoginPresenterModule.class)
public interface LoginComponent {
void inject(LoginActivity loginActivity);
}
LoginPresenter.cla SS
@ActivityScoped
public class LoginPresenter implements LoginContract.Presenter {
private static final String TAG = "LoginPresenter";
private LoginContract.View view;
private DataRespository dataRespository;
@Inject
LoginPresenter(LoginContract.View view, DataRespository dataRespository) {
this.view = view;
this.dataRespository = dataRespository;
}
@Override
public void initTest(String testNo) {
view.showProgressIndicator();
dataRespository.sendTest(testNo, new DataSource.onResponseCallback<Void>() {
@Override
public void onSuccess(Void obj) {
Log.d(TAG, "onSuccess: ");
}
@Override
public void onError(@NotNull ErrorWrapper error) {
Log.d(TAG, "onError: ");
}
});
}
@Override
public void start() {
}
}
DataRespositoryComponent.class
@ApplicationScoped
@Component(dependencies = ApplicationComponent.class,modules =
DataRespositoryModule.class)
public interface DataRepositoryComponent {
LoginComponent COMPONENT(LoginPresenterModule loginPresenterModule);
}
你可以包括来自泄漏金丝雀的痕迹/信息,从哪里泄漏? –
只是。检查出它 –