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 6bd894208956fdc2f1b4b86d1cc0e5478884fdf8..fe55794946b1f780341aa0f8c9548939fcd4a0fc 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseActivity.java +++ b/arms/src/main/java/com/jess/arms/base/BaseActivity.java @@ -85,7 +85,8 @@ public abstract class BaseActivity
extends AppCompatActivi
super.onCreate(savedInstanceState);
try {
int layoutResID = initView(savedInstanceState);
- if (layoutResID != 0) {//如果initView返回0,框架则不会调用setContentView(),当然也不会 Bind ButterKnife
+ //如果initView返回0,框架则不会调用setContentView(),当然也不会 Bind ButterKnife
+ if (layoutResID != 0) {
setContentView(layoutResID);
//绑定到butterknife
mUnbinder = ButterKnife.bind(this);
diff --git a/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java b/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
index acc83ad576579295761534eaf062e927e767fe60..2c59ac136c2f57c6d9f0529afe2050ee6f20b652 100644
--- a/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
+++ b/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
@@ -40,11 +40,20 @@ public class ActivityDelegateImpl implements ActivityDelegate {
this.iActivity = (IActivity) activity;
}
+ /**
+ *
+ * @param savedInstanceState
+ */
@Override
public void onCreate(Bundle savedInstanceState) {
- if (iActivity.useEventBus())//如果要使用eventbus请将此方法返回true
- EventBus.getDefault().register(mActivity);//注册到事件主线
- iActivity.setupActivityComponent(ArmsUtils.obtainAppComponentFromContext(mActivity));//依赖注入
+ // 如果要使用eventbus请将此方法返回true
+ if (iActivity.useEventBus()){
+ //注册到事件主线
+ EventBus.getDefault().register(mActivity);
+ }
+
+ // 这里提供AppComponent对象给BaseActivity的实现类,用于Dagger2依赖注入
+ iActivity.setupActivityComponent(ArmsUtils.obtainAppComponentFromContext(mActivity));
}
@Override
@@ -74,7 +83,8 @@ public class ActivityDelegateImpl implements ActivityDelegate {
@Override
public void onDestroy() {
- if (iActivity != null && iActivity.useEventBus())//如果要使用eventbus请将此方法返回true
+ //如果要使用eventbus请将此方法返回true
+ if (iActivity != null && iActivity.useEventBus())
EventBus.getDefault().unregister(mActivity);
this.iActivity = null;
this.mActivity = null;
diff --git a/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java b/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
index d56ac5beb2cd45f99a978b4db8f1f4fc84bac231..9ba790085d763758fbf536d11093fe3c4a71cd36 100644
--- a/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
+++ b/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
@@ -86,6 +86,7 @@ public class AppDelegate implements App, AppLifecycles {
//遍历 mAppLifecycles, 回调所有已注册的 AppLifecycles 的 attachBaseContext() 方法
for (AppLifecycles lifecycle : mAppLifecycles) {
+ // (个人选择扩展的逻辑)
lifecycle.attachBaseContext(base);
}
}
@@ -107,29 +108,32 @@ public class AppDelegate implements App, AppLifecycles {
this.mModules = null;
- //该注册是为了给每个 Activity 增加 Arms 框架中统一的全局逻辑
+ // 注册框架已实现的Activity生命周期逻辑
mApplication.registerActivityLifecycleCallbacks(mActivityLifecycle);
- //该注册是为了 RxLifecycle 能在每个 Activity 或 Fragment 的生命周期中, 发送对应 Event 事件
+ // 注册框架已实现的RxLifecycle逻辑
mApplication.registerActivityLifecycleCallbacks(mActivityLifecycleForRxLifecycle);
- //遍历 mActivityLifecycles, 注册所有 Activity 的生命周期回调, 每个 ConfigModule 的实现类可以声明多个 Activity 的生命周期回调
- //也可以有 N 个 ConfigModule 的实现类 (完美支持组件化项目 各个 Module 的各种独特需求)
+ // 注册个人扩展的Activity生命周期逻辑
+ // 每个 ConfigModule 的实现类可以声明多个 Activity 的生命周期回调
+ // 也可以有 N 个 ConfigModule 的实现类 (完美支持组件化项目 各个 Module 的各种独特需求)
for (Application.ActivityLifecycleCallbacks lifecycle : mActivityLifecycles) {
mApplication.registerActivityLifecycleCallbacks(lifecycle);
}
mComponentCallback = new AppComponentCallbacks(mApplication, mAppComponent);
+ // 注册回掉:内存紧张时释放部分内存
mApplication.registerComponentCallbacks(mComponentCallback);
- //遍历 mAppLifecycles, 回调所有已注册的 AppLifecycles 的 onCreate() 方法
+ // 注册个人扩展的App onCreate逻辑
for (AppLifecycles lifecycle : mAppLifecycles) {
lifecycle.onCreate(mApplication);
}
}
+
@Override
public void onTerminate(Application application) {
if (mActivityLifecycle != null) {
@@ -184,7 +188,7 @@ public class AppDelegate implements App, AppLifecycles {
/**
* 将AppComponent返回出去,供其它地方使用, AppComponent接口中声明的方法返回的实例,在getAppComponent()拿到对象后都可以直接使用
*
- * @return
+ * @return AppComponent
*/
@NonNull
@Override
@@ -196,6 +200,13 @@ public class AppDelegate implements App, AppLifecycles {
}
+ /**
+ * ComponentCallbacks2是一个细粒度的内存回收管理回调。
+ * Application、Activity、Service、ContentProvider、Fragment实现了ComponentCallback2接口
+ * 开发者应该实现onTrimMemory(int)方法,细粒度release 内存,参数可以体现不同程度的内存可用情况
+ * 响应onTrimMemory回调:开发者的app会直接受益,有利于用户体验,系统更有可能让app存活的更持久。
+ * 不响应onTrimMemory回调:系统更有可能kill 进程
+ */
private static class AppComponentCallbacks implements ComponentCallbacks2 {
private Application mApplication;
private AppComponent mAppComponent;
@@ -205,9 +216,57 @@ public class AppDelegate implements App, AppLifecycles {
this.mAppComponent = appComponent;
}
+ /**
+ * 在你的app生命周期的任何阶段,onTrimMemory的回调方法同样可以告诉你整个设备的内存资源已经开始紧张。
+ * 你应该根据onTrimMemory回调中的内存级别来进一步决定释放哪些资源。
+ * onTrimMemory()的回调可以发生在Application,Activity,Fragment,Service,Content Provider
+ *
+ * @see level 官方文档
+ * @param level 内存级别
+ */
@Override
public void onTrimMemory(int level) {
+ switch (level) {
+ //1.当开发者的app正在运行
+ // 设备开始运行缓慢,不会被kill不会被列为可杀死的。但是设备此时正运行于低内存状态下,系统开始触发杀死LRU Cache中的Process的机制。
+ case TRIM_MEMORY_RUNNING_MODERATE:
+
+ break;
+ // 设备运行更缓慢了,不会被kill。但请回收unused资源,以便提升系统的性能。你应该释放不用的资源用来提升系统性能(但是这也会直接影响到你的app的性能)。
+ case TRIM_MEMORY_RUNNING_LOW:
+
+ break;
+ // 设备运行特别慢,当前app还不会被杀死,但是系统已经把LRU Cache中的大多数进程都已经杀死,因此你应该立即释放所有非必须的资源。
+ // 如果系统不能回收到足够的RAM数量,系统将会清除所有的LRU缓存中的进程,并且开始杀死那些之前被认为不应该杀死的进程,例如那个包含了一个运行态Service的进程。
+ case TRIM_MEMORY_RUNNING_CRITICAL:
+
+ break;
+
+ //2.当前app UI不再可见,这是一个回收大个资源的好时机,
+ case TRIM_MEMORY_UI_HIDDEN:
+ break;
+
+ //3.当前的app进程被置于Background LRU List
+ // 进程位于LRU list的上端。尽管你的app进程并不是处于被杀掉的高危险状态,系统可能已经开始杀掉LRU缓存中的其他进程了。
+ // 你应该释放那些容易恢复的资源,以便于你的进程可以保留下来,这样当用户回退到你的app的时候才能够迅速恢复。
+ case TRIM_MEMORY_BACKGROUND:
+
+ break;
+ // 系统正运行于低内存状态并且你的进程已经已经接近LRU名单的中部位置。如果系统开始变得更加内存紧张,你的进程是有可能被杀死的。
+ case TRIM_MEMORY_MODERATE:
+
+ break;
+ // 系统正运行与低内存的状态并且你的进程正处于LRU名单中最容易被杀掉的位置。你应该释放任何不影响你的app恢复状态的资源。
+ // 低于api 14的,用户可以使用onLowMemory回调。
+ case TRIM_MEMORY_COMPLETE:
+
+ break;
+
+ default:
+
+ break;
+ }
}
@Override
@@ -215,9 +274,15 @@ public class AppDelegate implements App, AppLifecycles {
}
+ /**
+ * 当系统开始清除LRU缓存中的进程时,尽管它首先按照LRU的顺序来操作,但是它同样会考虑进程的内存使用量。因此消耗越少的进程则越容易被留下来。
+ * onTrimMemory() 的回调是在API 14才被加进来的,对于老的版本,你可以使用onLowMemory)回调来进行兼容。
+ * onLowMemory 相当与下面 onTrimMemory(TRIM_MEMORY_COMPLETE)
+ * @see #TRIM_MEMORY_COMPLETE
+ */
@Override
public void onLowMemory() {
- //内存不足时清理不必要的资源
+
}
}
diff --git a/arms/src/main/java/com/jess/arms/base/delegate/IActivity.java b/arms/src/main/java/com/jess/arms/base/delegate/IActivity.java
index e66677b97286c38231659c1fa32cbfca415f3689..579e98ecc20da6e37053cfa3ea0abe0e59ed90e8 100644
--- a/arms/src/main/java/com/jess/arms/base/delegate/IActivity.java
+++ b/arms/src/main/java/com/jess/arms/base/delegate/IActivity.java
@@ -83,6 +83,7 @@ public interface IActivity {
/**
* 这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册{@link FragmentManager.FragmentLifecycleCallbacks}
* 如果返回false,那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于 {@link BaseFragment} 的Fragment将不起任何作用
+ * @see com.jess.arms.integration.ActivityLifecycle#registerFragmentCallbacks (Fragment的注册过程)
*
* @return
*/
diff --git a/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java b/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
index 959eeb8eb8984cef10b62dda55ab0c848147c2f3..da57c6ab28fbc0288a5613a586633b6fb5ff95ae 100644
--- a/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
+++ b/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
@@ -153,17 +153,22 @@ public class ActivityLifecycle implements Application.ActivityLifecycleCallbacks
* @param activity
*/
private void registerFragmentCallbacks(Activity activity) {
+
boolean useFragment = activity instanceof IActivity ? ((IActivity) activity).useFragment() : true;
if (activity instanceof FragmentActivity && useFragment) {
if (mFragmentLifecycle == null) {
+ // Fragment生命周期实现类:EventBus,ButterKnife注册解绑,IFragment部分接口的实现
mFragmentLifecycle = new FragmentLifecycle();
}
+ // 注册框架已实现的Fragment生命周期逻辑
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycle, true);
if (mFragmentLifecycles == null && mExtras.containsKey(ConfigModule.class.getName())) {
+
mFragmentLifecycles = new ArrayList<>();
+
List