正文
Activity
implements
LifecycleOwner
{
private
SimpleArrayMap<Class<? extends ExtraData>, ExtraData> mExtraDataMap =
new
SimpleArrayMap<>();
private
LifecycleRegistry mLifecycleRegistry =
new
LifecycleRegistry(
this
);
@RestrictTo
(LIBRARY_GROUP)
public
void
putExtraData
(ExtraData extraData)
{
mExtraDataMap.put(extraData.getClass(), extraData);
}
@Override
@SuppressWarnings
(
"RestrictedApi"
)
protected
void
onCreate
(@Nullable Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
ReportFragment.injectIfNeededIn(
this
);
}
@CallSuper
@Override
protected
void
onSaveInstanceState
(Bundle outState)
{
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
super
.onSaveInstanceState(outState);
}
@RestrictTo
(LIBRARY_GROUP)
public
<T extends ExtraData>
T
getExtraData
(Class<T> extraDataClass)
{
return
(T) mExtraDataMap.get(extraDataClass);
}
@Override
public
Lifecycle
getLifecycle
()
{
return
mLifecycleRegistry;
}
@RestrictTo
(LIBRARY_GROUP)
public
static
class
ExtraData
{
}
}
复制代码
注释1处创建了LifecycleRegistry,它是Lifecycle的实现类。注释4处实现了LifecycleOwner接口定义的getLifecycle方法,返回了LifecycleRegistry。在注释3处,将Lifecycle的State设置为CREATED。正常来说应该在ComponentActivity的各个生命周期方法中改变Lifecycle的State,显然在ComponentActivity中没有做这些,而是将这个任务交给了ReportFragment,注释2处的将ComponentActivity注入到ReportFragment中。
frameworks/support/lifecycle/runtime/src/main/java/androidx/lifecycle/ReportFragment.java
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class ReportFragment extends Fragment {
private static final String REPORT_FRAGMENT_TAG = "androidx.lifecycle"
+ ".LifecycleDispatcher.report_fragment_tag";
public static void injectIfNeededIn(Activity activity) {
android.app.FragmentManager manager = activity.getFragmentManager();
if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
manager.executePendingTransactions();
}
}
static ReportFragment get(Activity activity) {
return (ReportFragment) activity.getFragmentManager().findFragmentByTag(
REPORT_FRAGMENT_TAG);
}
...
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
dispatchCreate(mProcessListener);
dispatch(Lifecycle.Event.ON_CREATE);
}
@Override
public void onStart() {
super.onStart();
dispatchStart(mProcessListener);
dispatch(Lifecycle.Event.ON_START);
}
@Override
public void onResume() {
super.onResume();
dispatchResume(mProcessListener);
dispatch(Lifecycle.Event.ON_RESUME);
}
...
private void dispatch(Lifecycle.Event event) {
Activity activity = getActivity();
if (activity instanceof LifecycleRegistryOwner) {
((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
return;
}
if