假设我正在开发一个移动应用程序。众所周知,默认情况下,大多数代码将在 UI 线程上运行。
我希望我的应用程序为我的用户尽可能顺利地运行,所以我确保我在所有可能的地方使用 async/await。
在速度较慢的安卓设备上,我仍然遇到 Logcat 告诉我我正在跳过帧的问题。所以我的下一个想法是确保可以在后台线程上完成的所有事情都放在后台线程上。因此,除了必须在 UI 线程上完成的工作之外,我将所有代码都放在后台线程上的任务中。
我的问题是,理论上我可以将太多代码放在后台线程上,由于必须在后台线程和 UI 线程之间移动太多,我实际上会使我的应用程序变慢?
您可以快速完成此操作,并且仍然可以使用可观察进行控制。
Observable.just("")
.observeOn(AndroidSchedulers.mainThread())
.flatMap { //do UI here }
.observeOn(Schedulers.io())
.doOnNext{ //do Async here }
.subscribe()
您需要用于后台执行。使用 AsyncTask。
public class SyncDatabase extends AsyncTask<List<ProductModel>, Void, Integer> {
@Override
protected Integer doInBackground(List<ProductModel>[] lists) {
return YOUR_INT;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Integer row) {
super.onPostExecute(row);
// This is mainThread
//you can do what ever you want example: textView.settext(row+"");
}
}
现在你从主线程调用
new SyncDatabase().execute(YOUR_GIVEN_LIST);
是的,您可以将大量作业放在后台线程中。您可以使用 android 线程池系统进行逐组线程执行
如果您有足够的信心自己有效地处理所有线程通信,则可以执行此操作。我建议使用反应方法。现在有不同的反应库可用于 Android。
在反应式系统中,完整的作业分为几个部分。称为 Actor 的不同工作人员执行整个工作的不同部分,并在完成工作时将工作转发给下一个工作人员。通道用于在工作人员之间发送和接收消息。