There are a number of benefits:
- It frees the implementation from the usage. You can at any time attach a new presenter to an activity that implements the same MvpPresenter without disturbing any other component at any phase of app development. It in effect decouples the Activity and Presenter.
- The presenter is a pura Java class and this abstraction free the Presenter to be tested in isolation at compile time.
- Only those apis are exposed to either classes that is required. Hence it prevents any accidental calling of non expected methods.
- The code readability is enhanced. We can just have a glance on the Mvp interfaces and deduce the purpose.