![](/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.