我正在将我的应用程序迁移到MVP.已经从这个konmik上获得了静态演示者模式的提示
这是我简短的MVP策略.为简洁起见,删除了大部分样板和MVP监听器.这个策略帮助我定位变更证明我的后台流程.与完成活动的暂停相比,活动正常恢复正常暂停.此外,Presenter只有应用程序上下文,因此它不会保留活动上下文.
我不是一名java专家,这是我第一次涉足MVP并使用静态演示者让我感到不舒服.我错过了什么吗?我的应用程序工作正常,响应速度更快.
视图
public class MainActivity extends Activity{
private static Presenter presenter;
protected void onResume() {
if (presenter == null)
presenter = new Presenter(this.getApplicationContext());
presenter.onSetView(this);
presenter.onResume();
}
protected void onPause() {
presenter.onSetView(null);
if(isFinishing())presenter.onPause();
}
}
Run Code Online (Sandbox Code Playgroud)
主持人
public class Presenter {
private MainActivity view;
Context context;
public Model model;
public Presenter(Context context) {
this.context = context;
model = new Model(context);
}
public void onSetView(MainActivity view) {
this.view = view;
}
public void onResume(){
model.resume();
}
public void onPause(){
model.pause();
}
}
Run Code Online (Sandbox Code Playgroud)
模型
public class Model {
public Model(Context context){
this.context = context;
}
public void resume(){
//start data acquisition HandlerThreads
}
public void pause(){
//stop HandlerThreads
}
}
Run Code Online (Sandbox Code Playgroud)
我会建议两件事.
Model,View和Presenter接口.
Activity,Fragment或View)应该非常简单,不需要进行测试.作为接口的示例:
interface MVPView {
void setText(String str);
}
interface MVPPresenter {
void onButtonClicked();
void onBind(MVPView view);
void onUnbind();
}
Run Code Online (Sandbox Code Playgroud)
MVPPresenter类现在不依赖于Android Framework:
class MyPresenter implements MVPPresenter{
MVPView view;
@Override void bind(MVPView view){ this.view = view; }
@Override void unbind() {this.view = null; }
@Override void onButtonClicked(){
view.setText("Button is Clicked!");
}
}
Run Code Online (Sandbox Code Playgroud)
Presenter静态类,我想使它成为一个保留片段.需要仔细跟踪静态对象,并在不需要时手动删除GC(否则会被视为内存泄漏).通过使用保留片段,可以更容易地控制演示者的生命周期.当拥有保留片段的片段完成时,保留片段也被破坏,内存可以被GC'd.请看这里的例子.| 归档时间: |
|
| 查看次数: |
3143 次 |
| 最近记录: |