0

私は、サーバーからのデータをユーザーのデバイスに表示するように要求するAndroidアプリを作成しているプロジェクトに取り組んでいます(提供できる背景情報がどれだけ多いかわかりません...さらに必要な場合は最善を尽くします)。Gingerbread(2.3)以降(最新のJellyBean 4.2まで)をサポートしています。

奇妙なことに、2.3.xを実行している電話(これらは一般に、LG Optimus 2Xなどの少し古いデバイス)でアプリが非常に高速かつスムーズに実行されますが、比較的新しいデバイスでアプリを実行しようとすると( JellyBean4.1以降を搭載したGalaxys3など)では、アプリの実行速度が非常に遅いため、パフォーマンスが使いやすさの問題になります。これは、サーバーからデータを取得して表示する画面で発生します。

また、エミュレータで実行することにより、この動作を確認しました。

そこで、LogCatで4.1以降で次の情報が得られるという事実に基づいて調査を行いました。

06-29 23:11:17.796:I / Choreographer(691):Xフレームをスキップしました!アプリケーションがメインスレッドで多くの作業を行っている可能性があります。

つまり、APIレベル16にChoreographerと呼ばれるものが追加されたようで、アニメーション、入力、描画のタイミングを調整します。

これがこの問題の原因であるかどうか疑問に思っていますか?ハードウェアの問題である可能性は低いようです。アプリにはアニメーションがなく、2.3.xと4.1以降の個別の実装はありません。

ありがとう

4

2 に答える 2

1

Ice Cream Sandwich以降、のデフォルトの動作がAsyncTask並列化されたエグゼキュータからシリアル化されたエグゼキュータに変更されました。

(コメントに示されているように)バッチで複数のネットワーク要求を実行しているAsyncTaskため、アプリケーションは前の要求応答を待ってから次の要求応答を起動します。

AsyncTask次のコードを使用して、のエグゼキュータを変更できます。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
    myTask.execute();
}

出典: CommonsWareブログから確認されたAsyncTaskスレッド回帰。

于 2013-03-19T09:38:13.933 に答える
1

Kindle Fire、Sony Xperia Z、Samsung S4(すべてandroid 4.2)で同じことを経験しました。

修正は次のとおりです。アプリマニフェストファイルで「android:supportsRtl="true"」を削除します。

それがあなたの時間を節約することを願っています。私はそれを得る前にテストとマージに4時間を費やします。

于 2014-02-11T13:07:14.387 に答える