【问题标题】:android - slow starting new Activityandroid - 缓慢启动新活动
【发布时间】:2015-07-14 10:26:34
【问题描述】:

我的项目中的第二个活动启动非常缓慢,我不知道如何解决它。它是如何工作的(一切都在 onCreate() 中):首先它使用 json 对页面进行 get-request:

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 并且我的滚动非常好。与启动 Activity 不同。

如何让它更好更优化?

【问题讨论】:

  • 在后台做所有network相关的工作。
  • 你是否在第一个活动中添加了一些代码

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    正如 Gaurav 所说,问题在于网络请求是在主线程上调用的。 当您要求网络呼叫您的程序时说:OK STOP I WAIT THE RESPONSE。 因此,如果你想改变这一点,你可以做各种各样的事情。 例如,您可以使用带有 lib (loopj lib) 的异步网络调用 或者您可以简单地打开一个线程:进行网络调用。

    这样你的用户界面就不会冻结

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2016-05-12
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多