问题描述
在做一个页面跳转小案例,在输入页输入要计算第几项斐波那契数列,然后跳转到另一个页面显示计算的结果,当输入的值很大时,跳转到另一个页面时,页面卡死黑屏。
问题原因
计算斐波那契数列的常规方法就是使用递归,而递归方法当输入的数值非常大的时候将非常耗时,此时如果在页面刚刚创建时就调用递归方法来计算巨大的斐波那契数列值将会使正常运行的主页面进程卡死中断,转而去计算这个巨大的值,等到计算完成才能正常显示页面。显然,这是导致卡死黑屏的根本原因。
解决方案
我们可以将耗时的计算巨大斐波那契数列值的操作放在另外一个开辟的子线程里面进行,从而不影响主线程的正常执行,也就不会导致主线程崩溃卡死页面黑屏。
优化前核心代码,与主线程同时执行:
优化后核心代码,子线程与主线程分别同时执行:
优化效果
这里我输入计算第100项的斐波那契数列值,主页面可以出来不再黑屏,只是没有计算结果显示,因为子线程正在计算中,见下面第二张图片。
END.