android-缓慢启动新活动
我项目中的第二个活动开始得很慢,我不知道如何修复它。它的工作原理(一切都在onCreate()中):首先,它确实使用json获取对页面的请求:android-缓慢启动新活动,android,json,android-activity,get,http-get,Android,Json,Android Activity,Get,Http Get,我项目中的第二个活动开始得很慢,我不知道如何修复它。它的工作原理(一切都在onCreate()中):首先,它确实使用json获取对页面的请求: try { DefaultHttpClient hc = new DefaultHttpClient(); ResponseHandler<String> res = new BasicResponseHandler(); HttpGet getMethod = new HttpGet(url)
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);
}
也许我应该在填充数组之外创建一次json_数组,然后将它作为JSONArray传递给那些方法,而不是作为字符串——我不知道它是否会影响速度。
在ArrayAdapter中,一切似乎都很好,我使用的是ViewHolder,我的滚动非常出色。与开始活动不同
如何使其更好、更优化?首先,不要在
onCreate()
中执行所有操作,而是在onResume()中执行
其次,所有服务器调用都应该在后台线程中使用异步,并使用结果显示用户
如果您不想在onResume()
和onPause()
期间多次调用数据API,您可以使用数组中的数据结果或其他内容,当onResume()
调用时,您可以检查它是否有数据,只需加载数据,或者从服务器获取数据。您是否在主线程上进行网络调用?请不要这样做。而是在不同的线程上执行网络操作
对于网络,您可以使用库。
正如Gaurav所说,通过使用回调或使用RxJava中的可观察项,异步操作也很容易,问题在于网络请求是在主线程上调用的。
当你请求网络呼叫时,你的程序说:好的,停止,我等待响应。
所以如果你想改变这一点,你可以做很多事情。
例如,您可以将异步网络调用与lib(loopj lib)一起使用
或者你可以简单地打开一个线程:进行网络调用
这样,您的UI就不会冻结在后台执行所有与网络相关的工作。您是否在第一次访问中添加了一些代码?您能帮我改装一下吗?我读了一些关于它的文章,但没有弄明白如何做。你可以在这里查看一些例子,或者是一些博客的例子,比如,你也可以帮助你。或者,您可以将代码共享到github/[任何其他git存储库],我也可以参与其中。
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;
}