Lifecycle 解析,【工作感悟

case ON_ANY:
throw new IllegalArgumentException(“ON_ANY must not been send by anybody”);
}
if (mLifecycleEventObserver != null) {
mLifecycleEventObserver.onStateChanged(source, event);
}
}
}

Activity 的 LifecycleRegistry 如何感知生命周期

先来看下 Activity 的基类 ComponentActivity

// androidx.core.app.ComponentActivity
@RestrictTo(LIBRARY_GROUP_PREFIX)
public class ComponentActivity extends Activity implements
LifecycleOwner,
KeyEventDispatcher.Component {

private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

@SuppressLint(“RestrictedApi”)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
}

@CallSuper
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
super.onSaveInstanceState(outState);
}

@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}

再来看下 ReportFragment

// ReportFragment.java
public class ReportFragment extends android.app.Fragment {
private static final String REPORT_FRAGMENT_TAG = “androidx.lifecycle”

  • “.LifecycleDispatcher.report_fragment_tag”;

public static void injectIfNeededIn(Activity activity) {
if (Build.VERSION.SDK_INT >= 29) {
// 在API 29+上,我们可以直接注册正确的生命周期回调
LifecycleCallbacks.registerIn(activity);
}
// 在API 29之前,并且为了保持与较旧版本的ProcessLifecycleOwner的兼容性(当生命周期运行时已经更新的时候可能不会更新
// 和需要支持未从support lib的FragmentActivity继承的activities),请使用framework fragment来获取正确的生命周期事件
android.app.FragmentManager manager = activity.getFragmentManager();
if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
manager.executePendingTransactions();
}
}

@SuppressWarnings(“deprecation”)
static void dispatch(@NonNull Activity activity, @NonNull Lifecycle.Event event) {
if (activity instanceof LifecycleRegistryOwner) {
((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
return;
}

if (activity instanceof LifecycleOwner) {
Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
if (lifecycle instanceof LifecycleRegistry) {
((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
}
}
}

static ReportFragment get(Activity activity) {
return (ReportFragment) activity.getFragmentManager().findFragmentByTag(
REPORT_FRAGMENT_TAG);
}

private ActivityInitializationListener mProcessListener;

private void dispatchCreate(ActivityInitializationListener listener) {
if (listener != null) {
listener.onCreate();
}
}

private void dispatchStart(ActivityInitializationListener listener) {
if (listener != null) {
listener.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用STC89C52、LED六段数码管、控制按键为元件来设计的计算器,允许对输入数据进行加减乘除运算及LED 显示。如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。实例所设计的计算器是用LED 数码管显示的,当然也可以用其他的器件显示,如LED 显示屏,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握Microsoft Visual C++ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。 结合实际情况,基于STC89C52RC芯片设计一个简易计算器。该计算器应满足的功能要求为: (1) 6位显示,显示的数字为0、1、2、3、4、5、6、7、8、9; (2) 数字右移显示; (3) 4位BCD码加减乘除,整数运算,清零。 主要硬件设备:单片机实验开发系统:矩阵键盘,开关量输入模块,数码管(LED)显示器。 根据功能和指示要求,本系统选用以STC89C52RC芯片为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。 具体设计如下: (1) 由于要设计的是简单的计算器,可以进行四则运算,用六段LED数码管动态显示。 (2) 另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。 (3) 执行程序:开机等待键入数值,当键入数字,通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值