android - 慢启动新活动

时间:2015-07-14 10:26:34

标签: android json android-activity get http-get

我项目中的第二个Activity开始很慢,我不知道如何修复它。它是如何工作的(onCreate()中的所有东西):首先它用json获取请求到页面:

try {
        DefaultHttpClient hc = new DefaultHttpClient();
        ResponseHandler<String> res = new BasicResponseHandler();
        HttpGet getMethod = new HttpGet(url);
        String response = hc.execute(getMethod, res);
        resStr = response.toString();
    } catch (Exception e) {
        System.out.println("Exp=" + e);
    }

我知道这里的一些方法已被弃用,但我不知道如何使其更加优化。因此,它返回一个包含大约32个对象的JSON数组的字符串。 然后我填充6个数组将它们传递给ArrayAdapter以填充ListView。获取不同类型数据的方法如下所示:

public static String GetWantedType(String resStr, int num) {
    String jsonvalues = "";
    try {
        JSONArray json_Array = new JSONArray(resStr);
        JSONObject json_data = json_Array.getJSONObject(num);
        jsonvalues = json_data.getString("wanted_type");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return jsonvalues;
}

也许我应该在填充数组之外创建一次json_Array并将其作为JSONArray传递给那些方法,而不是作为字符串传递 - 我不知道它是否会影响速度。 在ArrayAdapter中,一切似乎都没问题,我正在使用ViewHolder,我的滚动非常棒。与开始活动不同。

如何让它更好,更优化?

3 个答案:

答案 0 :(得分:1)

首先,不要在onCreate()中执行所有操作,而是选择onResume()

其次,所有服务器调用都应该在后台线程中使用Async并使用result来显示用户。

如果您不希望在onResume()onPause()期间多次调用API数据,则可以使用数组或其他内容的数据结果,并且在onResume()调用时,您可以检查它是否有数据,只需加载它,否则从服务器获取。

答案 1 :(得分:1)

正如Gaurav所说,问题是在主线程上调用了网络请求。 当您询问网络电话时,您的程序会说:OK STOP我等待响应。 所以如果你想改变它,你可以做各种各样的事情。 例如,您可以使用带有lib的异步网络调用(loopj lib) 或者你可以简单地打开一个线程:进行网络呼叫。

这样你的UI就不会冻结

答案 2 :(得分:0)

你在主线程上进行网络呼叫吗?请不要这样做。而是在不同的线程上进行网络操作。

对于网络,您可以使用库retrofit。 通过使用回调或使用RxJava中的Observables,它还可以让您轻松地异步执行操作