最適化のビットマップ装荷によaSyncTask
-
25-09-2019 - |
質問
そこで広く用いられている最適なシングルスレッドアプリケーションを読み込むバンチのタイルとメイクの大型ビットマップ.このアプリについて非常に低迷がいくつかあるが、ほとんどが荷重の新しいタイルシステム。Im現在、その活動に活用しようとしてい非同期タスクです。このアプリを検出するタイルが左にという手法によるonDraw、文字列が含まれるパスのビットマップの資産をフォルダをチェックを見れば、ビットマップがnullの場合前。これがnullの場合、読み込みます。私のアイデアのビットマップDoBackground、postExecuteトリガーの眺めを無効と表示、非搭載のビットマップ.複数の質問:
1.) したいので実行っ非同期タスクのための各ビットマップ?(この文:新myAsyncTaskManager().execute(bitmapPath);ない場合には、何が最善の方法についてのaSyncいは負荷のビットマップメモリ?
2.) はに設定できるようにする優先aSyncTask場合、ビットマップの負荷が遅すぎ?
3.) がありうか。imあるのでビットマップ積み、キャンバスに描画速度の遅いのアプリです。
私の臨時-非コード:
private class myAsyncTaskManager extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... bitmapPath) {
Log.e("sys","i ran using aTask");
try {
bitmapArray[rectBeingDrawn] = BitmapFactory.decodeStream(assetManager.open(imagePathToLoad));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
mCampusMap.invalidate();
}
}
解決
新しい答え全く新しい質問:)
の量に依存すビットマップ.どのくらいですか?いた数十人のスレッド)。ただ一つのコアハードウェアにおいては、複数のスレッドと買わないもののコンテキスト切り替えだけで溺れます。ていればトンをビットマップしくはキューのビットマップと働くことができます。のための、スレッドおよびハンドラという。
です。一般的となって、労働者のスレッド一優先度低下の主なねじになります。
他のヒント
待って、あなたは)(bitmapLoaderThread.runを呼んでいますか?それは(??何のスレッド何かに何の機能実行されている)、これらはいないコンテキストでコードスニペットであるために何が起こっているのかを把握する種類難しいのですが、あなたは()を実行して呼び出すことはありません - オペレーティングシステムの仕事ですもの!新しいスレッドを開始するには、start()を呼び出し - これは新しいスレッドを作成し、その実行()関数を呼び出します。あなたが直接実行呼び出した場合、あなたはまだ独自のスレッドでそれを呼んでいる!
それ以外は - あなたは二つのスレッド間のハンドシェイクをどのように行うのですか?どのようにワーカースレッドは、ビットマップがロードされていることをメインスレッドを教えてくれありませんか?あなたはそのためのハンドラを使用するか、完全に代わりスレッドのAsyncTaskを使用することができます。