![](/img/trans.png)
[英]Android-Starting new Activity in Handler/runnable is really slow
[英]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.