让我们说我正在开发一个移动应用程序。我们知道,默认情况下,大多数代码都将在UI线程上运行。
我希望我的应用程序尽可能顺利地为用户运行,因此我确保在所有可能的位置使用async / await。
在较慢的Android设备上,我仍然遇到Logcat的问题,告诉我我正在跳帧。所以我的下一个想法是确保可以在后台线程上完成的所有操作都放在后台线程上。因此除了必须在UI线程上完成的工作之外,我将所有代码都放在后台线程的任务中。
我的问题是,理论上我可以在背景线程上放置太多代码吗?由于必须在后台线程和UI线程之间移动太多,我实际上使我的应用程序变慢了?
答案 0 :(得分:0)
您可以快速执行此操作,并且仍然可以使用Observable进行控制。
Observable.just("")
.observeOn(AndroidSchedulers.mainThread())
.flatMap { //do UI here }
.observeOn(Schedulers.io())
.doOnNext{ //do Async here }
.subscribe()
答案 1 :(得分:0)
如果您有足够的信心自己处理所有线程通信,则可以执行此操作。我建议使用反应方法。现在有适用于Android的不同反应库。
在反应系统中,完整的工作分为几个部分。不同的工作人员称Actors执行完整工作的不同部分,并在完成将工作转发给下一个工作人员时。通道用于在工作人员之间发送和接收消息。
答案 2 :(得分:0)
您需要使用后台执行。使用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线程池系统进行逐组线程执行