Ошибка OOM при преобразовании Map keySet в массив String - Android - PullRequest
0 голосов
/ 17 октября 2019

У меня есть приведенный ниже класс утилит

class Util {
  private static Map<String, String> params;

  public static String getSignedUrl(Context context) {
    params= null; // reset previous instance
    params= new HashMap<>();
    ...
    addDefaultParams();
    addCustomParams();
    String signedUrl = getSignedUrl();
    ....
    return signedUrl;
  }

  private static String getSignedUrl() {
     String[] keyArray = params.keySet().toArray(new String[0]); // OOM error here!
     .....
     return signedUrl;
  } 

  private static void addDefaultParams() {
    //add some default params
    params.add(key, value);
  }

  private static void addCustomParams() {
    //add some custom params
    params.add(key, value);
  }

}

Из трассировки стека Firebase ниже строки вызывается OutOfMemoryError

String[] keyArray = params.keySet().toArray(new String[0]);

Это потому, что params является статическим полем ?. Но я сбрасываю предыдущий экземпляр params, поэтому я не уверен, почему это вызывает проблему OOM.

Любая помощь по этому вопросу будет принята с благодарностью. Заранее спасибо!

Редактировать Трассировка стека

Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 186909524 byte allocation with 16777216 free bytes and 262MB until OOM
java.lang.reflect.Array.createObjectArray (Array.java)
java.util.AbstractCollection.toArray (AbstractCollection.java:198)
.......
.......
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.lang.Thread.run (Thread.java:760)
...