「这是我参加11月更文应战的第26天,活动详情查看:2021最后一次更文应战」

Timer

关于Timer定时器的使用,咱们在iOS中会发现,定时器会与一些操作有抵触,比方滑动UITableView的时分,定时器会中止,需求切换形式才干处理抵触问题;那么Flutter中的Timer是否也有相同的问题呢?

咱们在列表界面中,添加一个Timer,代码如下:

Flutter(二十八)-定时器Timer的使用

咱们在initState办法中添加一个Timer定时器,每1秒履行一次,_count每次加1,当_count值为99的时分,咱们将定时器毁掉cancel();

咱们来看定时器运行期间,滑动列表的效果:

Flutter(二十八)-定时器Timer的使用

FlutterTimer不会影响到列表的滑动操作;滑动列表也不会定时器也不会收到影响;

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的状况;