Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
MVPArms
提交
3b4337c1
M
MVPArms
项目概览
门心叼龙
/
MVPArms
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
MVPArms
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3b4337c1
编写于
1月 18, 2018
作者:
S
sum41forever
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve comment
上级
ca2d7e89
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
95 addition
and
12 deletion
+95
-12
arms/src/main/java/com/jess/arms/base/BaseActivity.java
arms/src/main/java/com/jess/arms/base/BaseActivity.java
+2
-1
arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
...ava/com/jess/arms/base/delegate/ActivityDelegateImpl.java
+14
-4
arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
...rc/main/java/com/jess/arms/base/delegate/AppDelegate.java
+72
-7
arms/src/main/java/com/jess/arms/base/delegate/IActivity.java
.../src/main/java/com/jess/arms/base/delegate/IActivity.java
+1
-0
arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
...ain/java/com/jess/arms/integration/ActivityLifecycle.java
+6
-0
未找到文件。
arms/src/main/java/com/jess/arms/base/BaseActivity.java
浏览文件 @
3b4337c1
...
...
@@ -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
);
...
...
arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
浏览文件 @
3b4337c1
...
...
@@ -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
;
...
...
arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
浏览文件 @
3b4337c1
...
...
@@ -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
()
{
//内存不足时清理不必要的资源
}
}
...
...
arms/src/main/java/com/jess/arms/base/delegate/IActivity.java
浏览文件 @
3b4337c1
...
...
@@ -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
*/
...
...
arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
浏览文件 @
3b4337c1
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录