我正在實施網絡發現過程,並且我有一個名爲ActivityDiscovery
的活動,並帶有後臺處理AbstractDiscovery
。一旦發現被執行,它將進入後臺處理並運行直到完成處理。即使我按回來按鈕,它不會停止處理。如果我按下後退按鈕,我該如何實現立即停止後臺處理?我的AbstractDiscovery
也顯示在下面。如何立即停止後臺運行進程?
final public class ActivityDiscovery extends ActivityNet {
private AbstractDiscovery mDiscoveryTask = null;
@Override
public void onCreate(Bundle savedInstanceState) {
}
private void startDiscovering() {
mDiscoveryTask.execute();
}
}
public abstract class AbstractDiscovery extends AsyncTask<Void, HostBean, Void> {
//private final String TAG = "AbstractDiscovery";
protected int hosts_done = 0;
final protected WeakReference<ActivityDiscovery> mDiscover;
protected long ip;
protected long start = 0;
protected long end = 0;
protected long size = 0;
public AbstractDiscovery(ActivityDiscovery discover) {
mDiscover = new WeakReference<ActivityDiscovery>(discover);
}
public void setNetwork(long ip, long start, long end) {
this.ip = ip;
this.start = start;
this.end = end;
}
abstract protected Void doInBackground(Void... params);
@Override
protected void onPreExecute() {
size = (int) (end - start + 1);
if (mDiscover != null) {
final ActivityDiscovery discover = mDiscover.get();
if (discover != null) {
discover.setProgress(0);
}
}
}
@Override
protected void onProgressUpdate(HostBean... host) {
if (mDiscover != null) {
final ActivityDiscovery discover = mDiscover.get();
if (discover != null) {
if (!isCancelled()) {
if (host[0] != null) {
discover.addHost(host[0]);
}
if (size > 0) {
discover.setProgress((int) (hosts_done * 10000/size));
}
}
}
}
}
@Override
protected void onPostExecute(Void unused) {
if (mDiscover != null) {
final ActivityDiscovery discover = mDiscover.get();
if (discover != null) {
if (discover.prefs.getBoolean(Prefs.KEY_VIBRATE_FINISH,
Prefs.DEFAULT_VIBRATE_FINISH) == true) {
Vibrator v = (Vibrator) discover.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(ActivityDiscovery.VIBRATE);
}
discover.makeToast(R.string.discover_finished);
discover.stopDiscovering();
}
}
}
@Override
protected void onCancelled() {
if (mDiscover != null) {
final ActivityDiscovery discover = mDiscover.get();
if (discover != null) {
discover.makeToast(R.string.discover_canceled);
discover.stopDiscovering();
}
}
super.onCancelled();
}
}
我實現了你的想法,它的工作原理。 – batuman