1

ボタン クリック リスナーから開始される非同期ジョブがあります。これは印刷の仕事なので、1 日に何度も繰り返されます。印刷ジョブ間で、スレッドまたはオブジェクトがリークしていないことを確認したいと考えています。私の looper.mylooper.quit() 行だけで十分ですか?

リスナーのコードは次のとおりです。

    private final Button.OnClickListener cmdPrintOnClickListener = new Button.OnClickListener() {

    public void onClick(View v) {
        enableScreenForUse(false);
        setStatus("Saving any changes");
        saveButtonClicked();
        TwoInchZebraDocket newDocket  = new TwoInchZebraDocket(mRunDetailID, getContentResolver());  //could set this to final if we get problems -> see for details http://stackoverflow.com/questions/11424924/how-can-i-pass-an-object-to-a-new-thread-generated-anonymously-in-a-button-liste/11425012?iemail=1#11425012
        setStatus("Creating docket for printing");
        PrintRunnable target = new PrintRunnable(newDocket, CheckoutActivity.this);
        new Thread(target).start();

      }
};

実行可能なオブジェクト コードは次のとおりです。

    public void run() {
    Looper.prepare();
    printDocket();
    Looper.loop();
    Looper.myLooper().quit();

}
4

1 に答える 1

0

あなたが欲しいのはAsyncTaskだと思います。「printDocket()」が UI スレッドを更新している場合、ルーパーを参照する必要があり、不便です。

開発者向けドキュメントは次のとおりです。http://developer.android.com/reference/android/os/AsyncTask.html

基本的に、doInBackground() 内で非同期スレッド作業を行い、onPostExecute() 内で UI 更新を行います。

于 2012-07-13T02:25:17.490 に答える