State的生命周期有四种状态:
-
created:当State对象被创建时候,State.initState方法会被调用;
-
initialized:当State对象被创建,但还没有准备构建时,State.didChangeDependencies在这个时候会被调用;
-
ready:State对象已经准备好了构建,State.dispose没有被调用的时候;
-
defunct:State.dispose被调用后,State对象不能够被构建。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Txxq1QXj-1612666084611)(http://whysodiao.com/images/State LifeCycle.png)]
完整生命周期如下:
-
创建一个State对象时,会调用StatefulWidget.createState;
-
和一个BuildContext相关联,可以认为被加载了(mounted);
-
调用initState;
-
调用didChangeDependencies;
-
经过上述步骤,State对象被完全的初始化了,调用build;
-
如果有需要,会调用didUpdateWidget;
-
如果处在开发模式,热加载会调用reassemble;
-
如果它的子树(subtree)包含需要被移除的State对象,会调用deactivate;
-
调用dispose,State对象以后都不会被构建;
-
当调用了dispose,State对象处于未加载(unmounted),已经被dispose的State对象没有办法被重新加载(remount)。
setState
State中比较重要的一个方法是setState
,当修改状态时,widget会被更新。比方说点击CheckBox,会出现选中和非选中状态之间的切换,就是通过修改状态来达到的。
查看setState源码,在一些异常的情况下将会抛出异常:
-
传入的为null;
-
处在defunct阶段;
-
created阶段还没有被加载(mounted);
-
参数返回一个Future对象。
检查完一系列异常后,最后调用代码如下:
_element.markNeedsBuild();
markNeedsBuild内部,则是通过标记element为dirty,在下一帧的时候重建(rebuild)。可以看出setState并不是立即生效,它只是将widget进行了标记,真正的rebuild操作,则是等到下一帧的时候才会去进行。
StatefulWidget和StatelessWidget
StatefulWidget和StatelessWidget如下所示
一个StatelessWidget可以用多个不同的BuildContext构建,而一个StatefulWidget会为每个BuildContext创建一个State对象。
StatelessWidget
对于StatelessWidget,build方法会在如下三种情况下调用,
-
widget第一次被插入到树中;
-
widget的父节点更改了配置(configuration);
-
widget依赖的InheritedWidget改变了。
class GreenFrog extends StatelessWidget {
const GreenFrog({ Key key }) : super(key: key);
@override
Widget build(BuildContext context) {
return new Container(color: const Color(0xFF2DBD3A));
}
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
学习之门**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!