Ion を使用してリクエストを処理し、そのonCompleted
コールバックを使用してレスポンスを処理します。
私の問題は、このコールバック内で想定されていることを完了する前に、アプリが完全にフリーズすることです。クラッシュもエラーも何もありません。フリーズするだけです。
デバッグ時に、フリーズした後に次のコード行を実行することはありません。メソッド内のすべてのコードを削除しようとしhandleResponse
ましたが、別の時点でまだフリーズします。
これが私のコードの関連部分です(正確なコードではありません):
private void performSync() {
Ion.with(mContext.get())
.load(API_URL)
.setHeader("Content-Type", "application/json")
.setStringBody(json)
.asString()
.setCallback(new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String result) {
// Some code to map response.
...
// Freezes inside this method.
handleResponse(myResponse);
// Freezes here if I remove the above code.
myService.sendBroadcast(MY_ACTION);
}
});
}
private void handleResponse(Object myResponse) {
// Do something with my response (extract a list from it).
...
// Process data.
for (Object object : listFromResponse) {
// Do stuff with the objects. Works fine until the very last object.
}
// Freezes before this line. It never gets here.
PreferenceUtils.saveStringPreference(MY_PREFERENCE, someValue);
}
不正確なコードで申し訳ありません。本物を投稿することはできません。しかし、実際のコードは上記と同じ構造に従っているので、アイデアが得られるはずです。
私はこの問題を理解するのに苦労しています。スレッドの問題のように見えますが、Ion は非同期で動作するため、アプリがフリーズすることはありません。