「这是我参加11月更文应战的第26天,活动详情查看:2021最后一次更文应战」
Timer
关于Timer
定时器的使用,咱们在iOS
中会发现,定时器会与一些操作有抵触,比方滑动UITableView
的时分,定时器会中止,需求切换形式才干处理抵触问题;那么Flutter
中的Timer
是否也有相同的问题呢?
咱们在列表界面中,添加一个Timer
,代码如下:
咱们在initState
办法中添加一个Timer
定时器,每1
秒履行一次,_count
每次加1
,当_count
值为99
的时分,咱们将定时器毁掉cancel()
;
咱们来看定时器运行期间,滑动列表的效果:
在Flutter
中Timer
不会影响到列表的滑动操作;滑动列表也不会定时器也不会收到影响;
Timer的内存泄漏问题
尽管Flutter
中的Timer
与列表的滑动不会产生抵触了,但是目前咱们这样用仍然会有问题,请看下边的操作:
咱们将页面切出去之后,定时器并没有被完全毁掉,此时咱们的页面是保留状况的状况下,假如选择不保留状况,将会变成下边的状况:
能够看到,当页面处于wantKeepAlive = false
的状况下,假如切换界面,那么再次切换回来的时分,将会呈现两个定时器一起存在的状况;那么如何处理呢?
这个时分,咱们需求用到Widget
生命周期中的另一个函数dispose
;
Widget的dispose办法
dispose
办法类似于iOS
中的dealloc
办法,此办法在咱们切换页面之后将会调用,我么你能够在此办法中进行一些对象的毁掉操作;咱们需求再dispose
办法中将Timer
进行释放,代码如下:
在
dispose
办法中毁掉Timer
之前,需求判别_timer
是否为空,而且是否出去履行状况;
这样的话,假如咱们的wantKeepAlive = false
,那么每次页面切换出去的时分Timer
都会被毁掉,返回页面之后将会从头创立一个Timer
;假如wantKeepAlive = true
,那么页面切换出去之后,由于状况保留了,所以dispose
并不会履行,也不会进行Timer
的毁掉操作,页面再次呈现时,也不会呈现第二次创立Timer
的状况;