我正在从服务器下载数据并将其存储在本地sqlite db中。我想知道哪种方法是最好的方法,这样我的应用程序ui线程就不会冻结。 目前,我正在使用排球,并且应用有时会冻结,并且我也会获得日志“跳过帧”。谢谢。
答案 0 :(得分:0)
在Volley中,在UI线程上调用onResponse和onErrorResponse。因此,请将解析逻辑移入parseNetworkResponse(因为这是在后台线程中完成的),或者您可以在收到OnResponse中的响应后,使用Executors(或ExecutorServices,取决于您的用例)或AsyncTask切换线程,并将数据保存在本地数据库,如下所示。
public void onResponse(JSONObject response) {
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(() ->
// your database code
);
}
或
public void onResponse(JSONObject response) {
AsyncTask.execute(new Runnable() {
public void run() {
// your database code
}
});
}