提交 3b4337c1 编写于 作者: S sum41forever

Improve comment

上级 ca2d7e89
......@@ -85,7 +85,8 @@ public abstract class BaseActivity<P extends IPresenter> 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);
......
......@@ -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;
......
......@@ -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 <a href="https://developer.android.com/reference/android/content/ComponentCallbacks2.html#TRIM_MEMORY_RUNNING_MODERATE">level 官方文档</a>
* @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() {
//内存不足时清理不必要的资源
}
}
......
......@@ -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
*/
......
......@@ -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<ConfigModule> modules = (List<ConfigModule>) mExtras.get(ConfigModule.class.getName());
for (ConfigModule module : modules) {
module.injectFragmentLifecycle(mApplication, mFragmentLifecycles);
......@@ -171,6 +176,7 @@ public class ActivityLifecycle implements Application.ActivityLifecycleCallbacks
mExtras.remove(ConfigModule.class.getName());
}
// 注册个人扩展的Fragment生命周期逻辑
for (FragmentManager.FragmentLifecycleCallbacks fragmentLifecycle : mFragmentLifecycles) {
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(fragmentLifecycle, true);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册