私は実行するたびに自分のアプリにロードする必要がある資産フォルダに約1MBのJSONファイルを保存しています。組み込みのJSONパーサ(org.json)は非常にゆっくりとファイルを解析しますが、解析後はすぐにデータにアクセスして操作できます。私は、Activity1が起動される瞬間までにアプリケーションをクリックしてから7〜8秒を数えましたが、アクティビティ1からアクティビティ2に移動するにはわずか数ミリ秒でロードされたデータから処理されたデータに依存しますアクティビティ1。Parse〜1 MB Android上のJSONは非常に遅い
私が使用してファイルをメモリに読み込み、それを解析しています:
String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);
readFileToMemory(文字列)は次のようになります。ここで
private String readFileToMemory(String filename) {
StringBuilder data = new StringBuilder();
BufferedReader reader = null;
try {
InputStream stream = myContext.getAssets().open(filename);
reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
int result = 0;
do
{
char[] chunk = new char[512];
result = reader.read(chunk);
data.append(chunk);
}
while(result != -1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data.toString();
}
は、誰もが私が高速化することができますどのように任意の提案を持っていますデータの初期読み込みと解析を開始しますか?ローディング画面の背後にあるプロセス全体を隠すべきでしょうか?
マイクロ最適化はあなたが作ることができますがあります
を:ここで
は2
の相対的なパフォーマンス(最速)
Jackson > Gson >> JSONObject
(最も遅い)を参照してくださいです'data.ensureCapacity(stream.available())'のようにして、あなたのチャンクを8Kまたは64Kなどにすることができますが、実際にはデータをシリアル化したり保存したりする方がよいでしょう解析後にSQLテーブルに追加し、JSONファイルが更新されたことを検出した場合を除いてそれを使用します。 –