diff --git a/MVP_generator_solution b/MVP_generator_solution index 54989c9e9c0067ae0fe998803540649a45492213..cea20d17dfbc42d6f0fc3d86fee1e33672982735 100644 --- a/MVP_generator_solution +++ b/MVP_generator_solution @@ -136,6 +136,7 @@ Name: Contract #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end import com.jess.arms.mvp.BaseView; +import com.jess.arms.mvp.IModel; /** * 通过Template生成对应页面的MVP和Dagger代码,请注意输入框中输入的名字必须相同 @@ -154,7 +155,7 @@ public interface ${NAME}Contract { } //Model层定义接口,外部只需关心model返回的数据,无需关心内部细节,及是否使用缓存 - interface Model { + interface Model extends IModel{ } } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java b/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java index c92a7549798d7c51fb551b20bbb3b16c0d1b961a..c39415afa06fc204436daedbd391ed360467d4b4 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java @@ -52,6 +52,15 @@ public class WEApplication extends BaseApplication { } + @Override + public void onTerminate() { + super.onTerminate(); + if (mAppComponent != null) + this.mAppComponent = null; + if (mRefWatcher != null) + this.mRefWatcher = null; + } + /** * 安装leakCanary检测内存泄露 */ diff --git a/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java b/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java index f4f0d20daeb10498f1cb3e745fa6ae2871655f29..365673acec5f715e5744f8e05b3f8c45fd0b7e8e 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java @@ -3,6 +3,7 @@ package me.jessyan.mvparms.demo.di.component; import android.app.Application; import com.google.gson.Gson; +import com.jess.arms.base.AppManager; import com.jess.arms.di.module.AppModule; import com.jess.arms.di.module.ClientModule; import com.jess.arms.di.module.ImageModule; @@ -46,4 +47,7 @@ public interface AppComponent { //gson Gson gson(); + + //用于管理所有activity + AppManager appManager(); } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java index e7e66aeae5ca7512a1f33e20834a19c845242ba1..f601b65c50bbbb1535d20386b9453f0136b2ec4e 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java @@ -2,6 +2,7 @@ package me.jessyan.mvparms.demo.mvp.contract; import com.jess.arms.base.DefaultAdapter; import com.jess.arms.mvp.BaseView; +import com.jess.arms.mvp.IModel; import java.util.List; @@ -20,7 +21,7 @@ public interface UserContract { void endLoadMore(); } //Model层定义接口,外部只需关心model返回的数据,无需关心内部细节,及是否使用缓存 - interface Model { + interface Model extends IModel{ Observable> getUsers(int lastIdQueried, boolean update); } } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java index bef22aa3d98a48ee3996f8da2c1f46cab8222661..7d166f17fc53dbe9fc9b37f36e068e8c655e8651 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java @@ -9,8 +9,6 @@ import io.rx_cache.EvictDynamicKey; import io.rx_cache.Reply; import me.jessyan.mvparms.demo.mvp.contract.UserContract; import me.jessyan.mvparms.demo.mvp.model.api.cache.CacheManager; -import me.jessyan.mvparms.demo.mvp.model.api.cache.CommonCache; -import me.jessyan.mvparms.demo.mvp.model.api.service.CommonService; import me.jessyan.mvparms.demo.mvp.model.api.service.ServiceManager; import me.jessyan.mvparms.demo.mvp.model.entity.User; import rx.Observable; @@ -20,27 +18,23 @@ import rx.functions.Func1; * Created by jess on 9/4/16 10:56 * Contact with jess.yan.effort@gmail.com */ -public class UserModel extends BaseModel implements UserContract.Model{ +public class UserModel extends BaseModel implements UserContract.Model { public static final int USERS_PER_PAGE = 10; - private CommonService mCommonService; - private CommonCache mCommonCache; public UserModel(ServiceManager serviceManager, CacheManager cacheManager) { super(serviceManager, cacheManager); - this.mCommonService = mServiceManager.getCommonService(); - this.mCommonCache = mCacheManager.getCommonCache(); } @Override public Observable> getUsers(int lastIdQueried, boolean update) { - Observable> users = mCommonService + Observable> users = mServiceManager.getCommonService() .getUsers(lastIdQueried, USERS_PER_PAGE); //使用rxcache缓存,上拉刷新则不读取缓存,加载更多读取缓存 - return mCommonCache + return mCacheManager.getCommonCache() .getUsers(users - ,new DynamicKey(lastIdQueried) - ,new EvictDynamicKey(update)) + , new DynamicKey(lastIdQueried) + , new EvictDynamicKey(update)) .flatMap(new Func1>, Observable>>() { @Override public Observable> call(Reply> listReply) { @@ -48,4 +42,5 @@ public class UserModel extends BaseModel implements } }); } + } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CacheManager.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CacheManager.java index 449a2017cde186f442c8d51ff2c44d97c8c174b0..b21e43629cf7f9e67b50b75e51642453cbc6fd35 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CacheManager.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CacheManager.java @@ -10,7 +10,7 @@ import javax.inject.Singleton; * Contact with jess.yan.effort@gmail.com */ @Singleton -public class CacheManager extends BaseCacheManager { +public class CacheManager implements BaseCacheManager { private CommonCache mCommonCache; /** @@ -26,4 +26,12 @@ public class CacheManager extends BaseCacheManager { public CommonCache getCommonCache() { return mCommonCache; } + + /** + * 这里可以释放一些资源(注意这里是单例,即不需要在activity的生命周期调用) + */ + @Override + public void onDestory() { + + } } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/ServiceManager.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/ServiceManager.java index 2199a84eeafa56161d7fc1cf3fa913d164b527db..c494aab29dac73c06059029673cf99e59084f306 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/ServiceManager.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/ServiceManager.java @@ -10,7 +10,7 @@ import javax.inject.Singleton; * contact with jess.yan.effort@gmail.com */ @Singleton -public class ServiceManager extends BaseServiceManager { +public class ServiceManager implements BaseServiceManager { private CommonService mCommonService; /** @@ -25,4 +25,12 @@ public class ServiceManager extends BaseServiceManager { public CommonService getCommonService() { return mCommonService; } + + /** + * 这里可以释放一些资源(注意这里是单例,即不需要在activity的生命周期调用) + */ + @Override + public void onDestory() { + + } } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/common/WEActivity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/common/WEActivity.java index d16c230d7cb4bc1716a1964a949ab6342815a28f..91298ae873af912eaa22ec14cbc2bd67f5c399d4 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/common/WEActivity.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/common/WEActivity.java @@ -20,4 +20,10 @@ public abstract class WEActivity

extends BaseActivity

extends BaseFragment

mActivityList; + //当前在前台的activity + private BaseActivity mCurrentActivity; + + public AppManager(Application application) { + this.mApplication = application; + EventBus.getDefault().register(this); + } + + + /** + * 通过eventbus post事件,远程遥控执行对应方法 + */ + @Subscriber(tag = APPMANAGER_MESSAGE) + public void onReceive(Message message){ + switch (message.what){ + case START_ACTIVITY: + startActivity((Intent) message.obj); + break; + case SHOW_SNACKBAR: + break; + case KILL_ALL: + killAll(); + break; + case APP_EXIT: + AppExit(); + break; + } + } + + /** + * 让在前台的activity,打开下一个activity + * @param intent + */ + public void startActivity(Intent intent) { + if (getCurrentActivity()!=null){ + getCurrentActivity().startActivity(intent); + } + } + + /** + * 让在前台的activity,打开下一个activity + * @param activityClass + */ + public void startActivity(Class activityClass) { + if (getCurrentActivity()!=null){ + getCurrentActivity().startActivity(new Intent(mApplication,activityClass)); + } + } + + /** + * 释放资源 + */ + public void release() { + EventBus.getDefault().unregister(this); + mActivityList.clear(); + mActivityList = null; + mCurrentActivity = null; + mApplication = null; + } + + /** + * 将在前台的activity保存 + * + * @param currentActivity + */ + public void setCurrentActivity(BaseActivity currentActivity) { + this.mCurrentActivity = currentActivity; + } + + /** + * 获得当前在前台的activity + * @return + */ + public BaseActivity getCurrentActivity() { + return mCurrentActivity; + } + + /** + * 返回一个存储所有未销毁的activity的集合 + * + * @return + */ + public List getActivityList() { + if (mActivityList == null) { + mActivityList = new LinkedList<>(); + } + return mActivityList; + } + + + /** + * 添加Activity到集合 + */ + public void addActivity(BaseActivity activity) { + if (mActivityList == null) { + mActivityList = new LinkedList<>(); + } + synchronized (AppManager.class) { + if (!mActivityList.contains(activity)) { + mActivityList.add(activity); + } + } + } + + /** + * 删除集合里的指定activity + * + * @param activity + */ + public void removeActivity(BaseActivity activity) { + if (mActivityList == null) { + Timber.tag(TAG).w("mActivityList == null when removeActivity(BaseActivity)"); + return; + } + synchronized (AppManager.class) { + if (mActivityList.contains(activity)) { + mActivityList.remove(activity); + } + } + } + + /** + * 删除集合里的指定位置的activity + * + * @param location + */ + public BaseActivity removeActivity(int location) { + if (mActivityList == null) { + Timber.tag(TAG).w("mActivityList == null when removeActivity(int)"); + return null; + } + synchronized (AppManager.class) { + if (location > 0 && location < mActivityList.size()) { + return mActivityList.remove(location); + } + } + return null; + } + + /** + * 关闭指定activity + * + * @param activityClass + */ + public void killActivity(Class activityClass) { + if (mActivityList == null) { + Timber.tag(TAG).w("mActivityList == null when killActivity"); + return; + } + for (BaseActivity activity : mActivityList) { + if (activity.getClass().equals(activityClass)) { + activity.finish(); + } + } + } + + + /** + * 指定的activity实例是否存活 + * + * @param activity + * @return + */ + public boolean activityInstanceIsLive(BaseActivity activity) { + if (mActivityList == null) { + Timber.tag(TAG).w("mActivityList == null when activityInstanceIsLive"); + return false; + } + return mActivityList.contains(activity); + } + + + /** + * 指定的activity class是否存活(一个activity可能有多个实例) + * + * @param activityClass + * @return + */ + public boolean activityClassIsLive(Class activityClass) { + if (mActivityList == null) { + Timber.tag(TAG).w("mActivityList == null when activityClassIsLive"); + return false; + } + for (BaseActivity activity : mActivityList) { + if (activity.getClass().equals(activityClass)) { + return true; + } + } + + return false; + } + + + /** + * 关闭所有activity + */ + public void killAll() { + LinkedList copy; + synchronized (AppManager.class) { + copy = new LinkedList<>(getActivityList()); + } + for (BaseActivity baseActivity : copy) { + baseActivity.finish(); + } + } + + + /** + * 退出应用程序 + */ + public void AppExit() { + try { + killAll(); + ActivityManager activityMgr = + (ActivityManager) mApplication.getSystemService(Context.ACTIVITY_SERVICE); + activityMgr.killBackgroundProcesses(mApplication.getPackageName()); + System.exit(0); + } catch (Exception e) { + } + } +} diff --git a/arms/src/main/java/com/jess/arms/base/BaseActivity.java b/arms/src/main/java/com/jess/arms/base/BaseActivity.java index ccf7588b2b13f3290f396ce73dbe035dd4ccccf3..3434acb5d70595ace0c627f31d6204abea8ecff9 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseActivity.java +++ b/arms/src/main/java/com/jess/arms/base/BaseActivity.java @@ -3,7 +3,6 @@ package com.jess.arms.base; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; @@ -19,8 +18,6 @@ import com.zhy.autolayout.AutoRelativeLayout; import org.simple.eventbus.EventBus; -import java.util.LinkedList; - import javax.inject.Inject; import butterknife.ButterKnife; @@ -65,13 +62,15 @@ public abstract class BaseActivity

extends RxAppCompatA @Override protected void onResume() { super.onResume(); - registReceiver();//注册广播 + mApplication.getAppManager().setCurrentActivity(this); } @Override protected void onPause() { super.onPause(); - unregistReceriver(); + if (mApplication.getAppManager().getCurrentActivity() == this) { + mApplication.getAppManager().setCurrentActivity(null); + } } @Nullable @@ -81,11 +80,13 @@ public abstract class BaseActivity

extends RxAppCompatA mApplication = (BaseApplication) getApplication(); //如果intent包含了此字段,并且为true说明不加入到list // 默认为false,如果不需要管理(比如不需要在退出所有activity(killAll)时,退出此activity就在intent加此字段为true) - boolean isNotAdd = getIntent().getBooleanExtra(IS_NOT_ADD_ACTIVITY_LIST, false); - synchronized (BaseActivity.class) { - if (!isNotAdd) - mApplication.getActivityList().add(this); - } + boolean isNotAdd = false; + if (getIntent() != null) + getIntent().getBooleanExtra(IS_NOT_ADD_ACTIVITY_LIST, false); + + if (!isNotAdd) + mApplication.getAppManager().addActivity(this); + if (useEventBus())//如果要使用eventbus请将此方法返回true EventBus.getDefault().register(this);//注册到事件主线 setContentView(initView()); @@ -117,13 +118,14 @@ public abstract class BaseActivity

extends RxAppCompatA @Override protected void onDestroy() { super.onDestroy(); - synchronized (BaseActivity.class) { - mApplication.getActivityList().remove(this); - } + mApplication.getAppManager().removeActivity(this); if (mPresenter != null) mPresenter.onDestroy();//释放资源 if (mUnbinder != Unbinder.EMPTY) mUnbinder.unbind(); if (useEventBus())//如果要使用eventbus请将此方法返回true EventBus.getDefault().unregister(this); + this.mPresenter = null; + this.mUnbinder = null; + this.mApplication = null; } /** @@ -141,32 +143,6 @@ public abstract class BaseActivity

extends RxAppCompatA super.onBackPressed(); } - /** - * 注册广播 - */ - public void registReceiver() { - try { - mBroadcastReceiver = new ActivityReceriver(); - IntentFilter filter = new IntentFilter(ACTION_RECEIVER_ACTIVITY); - registerReceiver(mBroadcastReceiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * 解除注册广播 - */ - public void unregistReceriver() { - if (mBroadcastReceiver == null) return; - try { - unregisterReceiver(mBroadcastReceiver); - } catch (Exception e) { - e.printStackTrace(); - } - - } protected abstract View initView(); @@ -191,13 +167,13 @@ public abstract class BaseActivity

extends RxAppCompatA Snackbar.make(view, text, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT).show(); break; case "killAll": - LinkedList copy; - synchronized (BaseActivity.class) { - copy = new LinkedList(mApplication.getActivityList()); - } - for (BaseActivity baseActivity : copy) { - baseActivity.finish(); - } +// LinkedList copy; +// synchronized (BaseActivity.class) { +// copy = new LinkedList(mApplication.getActivityList()); +// } +// for (BaseActivity baseActivity : copy) { +// baseActivity.finish(); +// } // android.os.Process.killProcess(android.os.Process.myPid()); break; } diff --git a/arms/src/main/java/com/jess/arms/base/BaseApplication.java b/arms/src/main/java/com/jess/arms/base/BaseApplication.java index 7ed3f50745aed8be6ff7097344dbfc8dc2e3856f..d6bd3d9e7b136d36a4f592f10728f44a2cd5e450 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseApplication.java +++ b/arms/src/main/java/com/jess/arms/base/BaseApplication.java @@ -4,12 +4,14 @@ import android.app.Application; import android.content.Context; import android.content.Intent; +import com.jess.arms.di.component.DaggerBaseComponent; import com.jess.arms.di.module.AppModule; +import com.jess.arms.di.module.BaseModule; import com.jess.arms.di.module.ClientModule; import com.jess.arms.di.module.ImageModule; import com.jess.arms.http.GlobeHttpHandler; -import java.util.LinkedList; +import javax.inject.Inject; import me.jessyan.rxerrorhandler.handler.listener.ResponseErroListener; import okhttp3.Interceptor; @@ -25,10 +27,11 @@ import okhttp3.Interceptor; */ public abstract class BaseApplication extends Application { static private BaseApplication mApplication; - public LinkedList mActivityList; private ClientModule mClientModule; private AppModule mAppModule; private ImageModule mImagerModule; + @Inject + protected AppManager mAppManager; protected final String TAG = this.getClass().getSimpleName(); @@ -36,6 +39,11 @@ public abstract class BaseApplication extends Application { public void onCreate() { super.onCreate(); mApplication = this; + DaggerBaseComponent + .builder() + .baseModule(new BaseModule(this)) + .build() + .inject(this); this.mClientModule = ClientModule//用于提供okhttp和retrofit的单列 .buidler() .baseurl(getBaseUrl()) @@ -43,30 +51,37 @@ public abstract class BaseApplication extends Application { .interceptors(getInterceptors()) .responseErroListener(getResponseErroListener()) .build(); - this.mAppModule = new AppModule(this);//提供application + this.mAppModule = new AppModule(this, mAppManager);//提供application this.mImagerModule = new ImageModule();//图片加载框架默认使用glide - } + } /** - * 提供基础url给retrofit - * - * @return + * 程序终止的时候执行 */ - protected abstract String getBaseUrl(); - + @Override + public void onTerminate() { + super.onTerminate(); + if (mClientModule != null) + this.mClientModule = null; + if (mAppModule != null) + this.mAppModule = null; + if (mImagerModule != null) + this.mImagerModule = null; + if (mAppManager != null) {//释放资源 + this.mAppManager.release(); + this.mAppManager = null; + } + if (mApplication != null) + this.mApplication = null; + } /** - * 返回一个存储所有存在的activity的列表 + * 提供基础url给retrofit * * @return */ - public LinkedList getActivityList() { - if (mActivityList == null) { - mActivityList = new LinkedList(); - } - return mActivityList; - } + protected abstract String getBaseUrl(); public ClientModule getClientModule() { @@ -82,6 +97,10 @@ public abstract class BaseApplication extends Application { } + public AppManager getAppManager() { + return mAppManager; + } + /** * 这里可以提供一个全局处理http响应结果的处理类, * 这里可以比客户端提前一步拿到服务器返回的结果,可以做一些操作,比如token超时,重新获取 @@ -107,6 +126,7 @@ public abstract class BaseApplication extends Application { * 用来提供处理所有错误的监听 * 如果要使用ErrorHandleSubscriber(默认实现Subscriber的onError方法) * 则让子application重写此方法 + * * @return */ protected ResponseErroListener getResponseErroListener() { diff --git a/arms/src/main/java/com/jess/arms/base/BaseFragment.java b/arms/src/main/java/com/jess/arms/base/BaseFragment.java index 2003791dfcde170c1b154c75ca2c8a05a6c57a87..51ef9b80ca9f922768b4bf58ac116f54829585a3 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseFragment.java +++ b/arms/src/main/java/com/jess/arms/base/BaseFragment.java @@ -64,6 +64,10 @@ public abstract class BaseFragment

extends RxFragment { if (mPresenter != null) mPresenter.onDestroy();//释放资源 if (useEventBus())//如果要使用eventbus请将此方法返回true EventBus.getDefault().unregister(this); + this.mPresenter = null; + this.mActivity = null; + this.mRootView = null; + this.mUnbinder = null; } /** diff --git a/arms/src/main/java/com/jess/arms/di/component/BaseComponent.java b/arms/src/main/java/com/jess/arms/di/component/BaseComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..10a021a73b8834244798bd9306f5636923e53651 --- /dev/null +++ b/arms/src/main/java/com/jess/arms/di/component/BaseComponent.java @@ -0,0 +1,18 @@ +package com.jess.arms.di.component; + +import com.jess.arms.base.BaseApplication; +import com.jess.arms.di.module.BaseModule; + +import javax.inject.Singleton; + +import dagger.Component; + +/** + * Created by jess on 14/12/2016 13:58 + * Contact with jess.yan.effort@gmail.com + */ +@Singleton +@Component(modules={BaseModule.class}) +public interface BaseComponent { + void inject(BaseApplication application); +} diff --git a/arms/src/main/java/com/jess/arms/di/module/AppModule.java b/arms/src/main/java/com/jess/arms/di/module/AppModule.java index f2a6534a7b24093437208235139ef7602add03bc..f861d7d608e895be83ec44cec871da9457bb3f23 100644 --- a/arms/src/main/java/com/jess/arms/di/module/AppModule.java +++ b/arms/src/main/java/com/jess/arms/di/module/AppModule.java @@ -3,6 +3,7 @@ package com.jess.arms.di.module; import android.app.Application; import com.google.gson.Gson; +import com.jess.arms.base.AppManager; import javax.inject.Singleton; @@ -15,9 +16,11 @@ import dagger.Provides; @Module public class AppModule { private Application mApplication; + private AppManager mAppManager; - public AppModule(Application application) { + public AppModule(Application application, AppManager appManager) { this.mApplication = application; + this.mAppManager = appManager; } @Singleton @@ -29,4 +32,8 @@ public class AppModule { @Singleton @Provides public Gson provideGson(){return new Gson();} + + @Singleton + @Provides + public AppManager provideAppManager(){return mAppManager;} } diff --git a/arms/src/main/java/com/jess/arms/di/module/BaseModule.java b/arms/src/main/java/com/jess/arms/di/module/BaseModule.java new file mode 100644 index 0000000000000000000000000000000000000000..6a9258eec4b5ab33dbdd465581ddea7b12bf5678 --- /dev/null +++ b/arms/src/main/java/com/jess/arms/di/module/BaseModule.java @@ -0,0 +1,27 @@ +package com.jess.arms.di.module; + +import android.app.Application; + +import com.jess.arms.base.AppManager; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by jess on 14/12/2016 13:54 + * Contact with jess.yan.effort@gmail.com + */ +@Module +public class BaseModule { + private Application mApplication; + + public BaseModule(Application application) { + this.mApplication = application; + } + + @Singleton + @Provides + public AppManager provideAppManager(){ return new AppManager(mApplication);} +} diff --git a/arms/src/main/java/com/jess/arms/http/BaseCacheManager.java b/arms/src/main/java/com/jess/arms/http/BaseCacheManager.java index 95dafe0b982502bc41f940c6d6aa7e692a686d7d..f2aaaa205862f1d4330ab5e6d0281ef223a7e93e 100644 --- a/arms/src/main/java/com/jess/arms/http/BaseCacheManager.java +++ b/arms/src/main/java/com/jess/arms/http/BaseCacheManager.java @@ -4,5 +4,6 @@ package com.jess.arms.http; * Created by jess on 8/30/16 16:00 * Contact with jess.yan.effort@gmail.com */ -public abstract class BaseCacheManager { +public interface BaseCacheManager { + void onDestory(); } diff --git a/arms/src/main/java/com/jess/arms/http/BaseServiceManager.java b/arms/src/main/java/com/jess/arms/http/BaseServiceManager.java index d9fe99e44a750e2c0c2f580c438b0d7d142dedeb..2c5ea7bb197eac3aedff682cf769b026d85f1b9e 100644 --- a/arms/src/main/java/com/jess/arms/http/BaseServiceManager.java +++ b/arms/src/main/java/com/jess/arms/http/BaseServiceManager.java @@ -4,6 +4,7 @@ package com.jess.arms.http; * Created by jess on 8/30/16 15:59 * Contact with jess.yan.effort@gmail.com */ -public abstract class BaseServiceManager { +public interface BaseServiceManager { + void onDestory(); } diff --git a/arms/src/main/java/com/jess/arms/mvp/BaseModel.java b/arms/src/main/java/com/jess/arms/mvp/BaseModel.java index af6ebe85cf480139342aa44c5eb32eee1f1e5284..01f2bcefa10b91b266aacaf3c29f3a3e550294e9 100644 --- a/arms/src/main/java/com/jess/arms/mvp/BaseModel.java +++ b/arms/src/main/java/com/jess/arms/mvp/BaseModel.java @@ -7,7 +7,7 @@ import com.jess.arms.http.BaseServiceManager; * Created by jess on 8/5/16 12:55 * contact with jess.yan.effort@gmail.com */ -public class BaseModel { +public class BaseModel implements IModel{ protected S mServiceManager;//服务管理类,用于网络请求 protected C mCacheManager;//缓存管理类,用于管理本地或者内存缓存 @@ -16,8 +16,13 @@ public class BaseModel this.mCacheManager = cacheManager; } + @Override public void onDestory() { - mServiceManager = null; - mCacheManager = null; + if (mServiceManager != null) { + mServiceManager = null; + } + if (mCacheManager != null) { + mCacheManager = null; + } } } diff --git a/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java b/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java index 6a7729a4524202ddb49092b4cd87957dfec142d9..d48f2f2216e303b3c47cd3e7a62f8b23a177b2ba 100644 --- a/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java +++ b/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java @@ -8,7 +8,7 @@ import rx.subscriptions.CompositeSubscription; /** * Created by jess on 16/4/28. */ -public class BasePresenter implements presenter { +public class BasePresenter implements presenter { protected final String TAG = this.getClass().getSimpleName(); protected CompositeSubscription mCompositeSubscription; @@ -43,12 +43,12 @@ public class BasePresenter implements presenter { if (useEventBus())//如果要使用eventbus请将此方法返回true EventBus.getDefault().unregister(this);//解除注册eventbus unSubscribe();//解除订阅 - this.mModel = null; + if (mModel != null) { + mModel.onDestory(); + this.mModel = null; + } this.mRootView = null; - } - - protected void handleError(Throwable throwable) { - + this.mCompositeSubscription = null; } /** diff --git a/arms/src/main/java/com/jess/arms/mvp/IModel.java b/arms/src/main/java/com/jess/arms/mvp/IModel.java new file mode 100644 index 0000000000000000000000000000000000000000..3c1940ef463715e79033845920c916fbfe5b8562 --- /dev/null +++ b/arms/src/main/java/com/jess/arms/mvp/IModel.java @@ -0,0 +1,10 @@ +package com.jess.arms.mvp; + +/** + * Created by jess on 15/12/2016 10:45 + * Contact with jess.yan.effort@gmail.com + */ + +public interface IModel { + void onDestory(); +} diff --git a/arms/src/main/java/com/jess/arms/utils/UiUtils.java b/arms/src/main/java/com/jess/arms/utils/UiUtils.java index 82214b5976105a89c1a6897b2350581acff8b374..0ebe090818f2a8ec064200e3b6eb14234b4ca887 100644 --- a/arms/src/main/java/com/jess/arms/utils/UiUtils.java +++ b/arms/src/main/java/com/jess/arms/utils/UiUtils.java @@ -6,7 +6,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import android.os.Bundle; +import android.os.Message; import android.support.v7.app.AlertDialog; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; @@ -24,8 +24,13 @@ import android.widget.Toast; import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseApplication; +import org.simple.eventbus.EventBus; + import java.security.MessageDigest; +import static com.jess.arms.base.AppManager.APPMANAGER_MESSAGE; +import static com.jess.arms.base.AppManager.START_ACTIVITY; + /** * Created by jess on 2015/11/23. */ @@ -265,12 +270,18 @@ public class UiUtils { * @param */ public static void startActivity(Intent content) { - Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); - intent.putExtra("type", "startActivity"); - Bundle bundle = new Bundle(); - bundle.putParcelable("content", content); - intent.putExtras(bundle); - getContext().sendBroadcast(intent); +// Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); +// intent.putExtra("type", "startActivity"); +// Bundle bundle = new Bundle(); +// bundle.putParcelable("content", content); +// intent.putExtras(bundle); +// getContext().sendBroadcast(intent); + + + Message message = new Message(); + message.what = START_ACTIVITY; + message.obj = content; + EventBus.getDefault().post(message,APPMANAGER_MESSAGE); } /**