繁体   English   中英

Android-缓慢启动新活动

[英]android - slow starting new 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,并且滚动效果非常好。 不像开始活动。

如何使其更好,更优化?

首先,不要在onCreate()进行所有操作,而最好在onResume()

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

如果您不想在onResume()onPause()期间多次调用数据API,则可以使用数组中数据的结果,也可以在onResume()调用时检查是否有数据,只需加载,否则从服务器获取。

正如Gaurav所说,问题在于在主线程上调用了网络请求。 在您要求网络调用程序时,请说:OK STOP I WAIT RESPONSE。 因此,如果您要更改此设置,则可以执行各种操作。 例如,您可以使用带有lib(loopj lib)的异步网络调用,也可以简单地打开Thread:进行网络调用。

这样,您的用户界面将不会冻结

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

对于联网,您可以使用库改造 通过使用回调或RxJava中的Observable,它还使您可以轻松地异步执行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM