0

大きな画像をダウンロードするためのキューを作成するには? それに使いServiceました。キューも動的です。ユーザーが 3 つの画像のダウンロードを開始すると、3 つの画像をダウンロードするサービスを開始します。ただし、ユーザーはダウンロード用の画像を追加することもできますが、キューに追加して、すべての画像を 1 つずつダウンロードする必要があります。

でハンドラを使用できますServiceか? handler.sendMessage(msg1)とを使用できますhandler.sendMessage(msg2)か? handleMessage(msg)ハンドラーのメソッドがキューをスマートに維持することを知りません。

msg1とはmsg2同時に処理されますか、それともキューで処理されますか? それが1つずつ処理される場合、それは私の問題を解決します(手段msg2は の完了後に処理されmsg1ます)。

または、利用可能なキュー管理プロセスはありますか?

ここでは、画像をダウンロードするためのキューを作成し、そのダウンロードした画像 ID を保存したいと考えていますが、何らかのタスクを維持するキューがあれば、それは素晴らしくスマートなキューになります。

Android のキューにあるファイルをダウンロードしても満足できませんでした。

4

1 に答える 1

0

ハンドラー自体がメッセージのキューを管理します

これは で使用できますService

サンプルを作成しました.カスタム プロセスをキューで使用するつもりです.ここからダウンロードできます..

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Message msg = h.obtainMessage();
    msg.what = 0;
    msg.obj = "url1";
    h.sendMessage(msg);

    Message msg1 = h.obtainMessage();
    msg1.what = 1;
    msg1.obj = "url2";
    h.sendMessage(msg1);

    Message msg2 = h.obtainMessage();
    msg2.what = 2;
    msg2.obj = "url2";
    h.sendMessage(msg2);

    Message msg3 = h.obtainMessage();
    msg3.what = 3;
    msg3.obj = "url3";
    h.sendMessage(msg3);
}

Handler h = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        Log.e("", "handleMessage(msg) " + msg.what);
        download("" + System.currentTimeMillis(), "" + msg.obj);
        super.handleMessage(msg);
    }
};

private void download(String name, String link) {

    try {

        // Debug.e("", photo.imagename);
        URL url = new URL(link);
        HttpGet httpRequest = new HttpGet(url.toURI());

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = (HttpResponse) httpclient
                .execute(httpRequest);

        HttpEntity entity = response.getEntity();
        BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
        InputStream input = bufHttpEntity.getContent();

        File outPutFile = new File(
                Environment.getExternalStorageDirectory(), name);
        OutputStream output = new FileOutputStream(outPutFile);

        try {
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                output.write(buffer, 0, bytesRead);
            }

        } finally {
            output.close();
            input.close();
        }

        // Toast.makeText(mContext, "Download completed",
        // Toast.LENGTH_SHORT).show();

        // incrementCounter(Constant.ACTION_DOWNLOADS, photo.iid);

    } catch (Exception e) {
        e.printStackTrace();
    }

 }
}

他のベストプラクティスは歓迎されます...

于 2013-01-02T05:35:17.807 に答える