Android正确的方法:应该解析JSON响应 - 在UI线程中,还是在另一个中?

Rik*_*avi 10 java multithreading android json

我只是想知道 - 在主应用户界面中应该在Android应用程序中解析JSONObjectJSONArray从网络服务器接收的内容,还是应该交付给另一个?

例如,我正在使用Volley库:

private void fetchResults(){

    RequestQueue queue = Volley.newRequestQueue(mContext);
        String url = AuthenticationRequester.URL_GET_ALL_ORDERS;
        JsonArrayRequest jsonDepartureObj = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray jsonArray) {
                iVolleyCallback.onJSONArraySuccess(jsonArray);
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                // hide the progress dialog
            }
        });
        queue.add(jsonDepartureObj);
}
Run Code Online (Sandbox Code Playgroud)

那么我应该把 iVolleyCallback.onJSONArraySuccess(jsonArray);另一个线程执行还是可以维护主UI线程?

让我们假设传入的JSON很大,需要一些时间才能继续?

同样的问题涉及AsyncTask以及使用Android中的Web服务的其他可能方式.

hrs*_*krs 3

最好,每个需要很长时间的任务都应该在另一个线程中处理,以避免过载MainThread

AsyncTasks 理想情况下应该用于短操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如执行器ThreadPoolExecutorFutureTask

所以如果你知道你有大数据并且需要时间,你会使用new thread,但如果数据很小并且需要更少的时间,为什么要冒这个风险呢?也将其移至新线程