1
我有一個異步作業是從一個按鈕點擊偵聽器啓動的。這是一項打印工作,所以它會在一天中一次又一次地發生。我想確保打印作業之間不會泄露任何線索或物體。我的looper.mylooper.quit()行是我需要的嗎?如何殺死looper/runnable
監聽器代碼:
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();
}
};
的Runnable對象的代碼是:
public void run() {
Looper.prepare();
printDocket();
Looper.loop();
Looper.myLooper().quit();
}
我嘗試了兩種方式 - 但無論哪種方式,我必須有一個looper.prepare(),否則與移動打印機的藍牙連接失敗。無論哪種方式,我仍然需要知道是否有任何泄漏。 – WaterBoy 2012-07-13 04:56:10