我有一个活动DisplayResults,该活动从我的MainActivity
开始。在DisplayResultsActivity
中,它在其onCreate()
函数中创建自定义类ProductFinder的对象。在ProductFinder的构造函数中,有一个while
循环需要大约10秒钟的时间来执行。
我的问题是,当我从DisplayResult
开始MainActivity
时,整个屏幕在while循环期间变黑,然后最终DisplayResults
活动在屏幕上显示了所有内容
我想要的是正常绘制DisplayResults
活动,然后等待ProductFinder
类中的循环完成其操作,而不会冻结整个UI。在循环运行时,在DisplayResults
的中间放置一个加载圈会很好。
执行此操作的正确方法是什么?我知道线程中需要包含某些内容,但是我不确定将加载循环放入哪个类以及将哪些代码放入线程中。
答案 0 :(得分:0)
这完全取决于要求
如上所述,您可以使用AsyncTask来完成这项工作,但是可能会遇到诸如内存泄漏和处理配置更改(例如设备旋转)之类的问题。
第二个选择是使用AsyncTaskLoader,它将使您能够处理配置更改(Difference between AsyncTask to AsyncTaskLoader by Google)。
第三种方法和较新的方法是使用背景线程来订阅ViewModel,并在其上附加MutableLiveData,并通过后台线程传递状态值(您也可以使用AsyncTask来管理状态)
最后一个选择(也许是第一个)是使用RxAndroid