博文

在安卓中无法通过在for循环中setText()实现TextView的动态变化

图片
 有不少安卓开发的新手会想当然地以为在一个for循环中就可以实现TextView的动态变化。 例如,下面就是错误的示例:  错误的原因在于textView.setText()完成后线程并没有停下来, 安卓必须在线程停下来后才会显示画面。 所以正确的做法是新开启一条线程去动态更新TextView, 下面是正确的代码: 开启新的线程后还要在textView.setText()后面让线程暂停一会儿,只有线程暂停了安卓才能显示画面,在这里最好用handler来更新ui。

关于安卓LiveData的一点可能造成内存泄露的细节问题

图片
 LiveData最重要的一个特性是具有生命周期感知能力,当Activity或者Fragment处于活跃状态时,观察者才能观察到LiveData的变化。 如果这一点没理解好就容易犯难以察觉的错误。无论是LiveData还是观察者都要绑定一个生命周期拥有者,简单来说就是你的LiveData或者观察者要绑定一个Avtivity或者Fragment 。 注意一点,当你的观察者是在Fragment时,千万不要让你的观察者绑定Activity,不然可能会造成内存泄露,要把你的观察者绑定在Fragment的生命周期上。 例如下面的liveData是在一个fragment中,第一种是正确的写法,第二种写法不会报错,但是会出现内存泄露的问题。 第一种写法: 第二种写法: