मेरे पास एक इरादा सेवा है जो कई गीगाबाइट वीडियो डाउनलोड करती है। अगर "गलती से" शुरू करें या जो भी हो, तो डाउनलोड को रोकने के लिए मेरे पास "स्टॉप" बटन है। मुझे पता है कि यह दो बार पूछा गया है लेकिन मेरे लिए कोई जवाब नहीं है।स्टॉप इंटेंट सेवा को कैसे प्रगति पर बल देना है?
मैं stopService()
पर कॉल करने का प्रयास करता हूं, काम नहीं करता है। यह सिर्फ IntentService.OnDestroy()
पर कॉल करता है। मैंने को onDestroy
के अंदर कॉल करने का प्रयास किया, या तो काम नहीं करता है।
मैंने ध्वज की तरह कुछ करने की कोशिश की, लेकिन हैडलइन्टेंट को पहले से चलने पर कॉल नहीं किया जाता है, यह तब तक इंतजार करता है जब तक कि वर्तमान कार्य समाप्त नहीं हो जाता है और तब निष्पादित होता है। और यहां तक कि अगर यह काम करता, तो मुझे कथन के बारे में कुछ विशाल होना होगा, जो
मेरा एकमात्र विकल्प है जो वास्तव में इसे नियमित सेवा में फिर से लिखना है?
//
public class SyncService extends IntentService {
boolean isCanceled;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("action")) {
// Set the canceling flag
isCanceled= intent.getStringExtra("action").equals("cancel");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
// Clean up the possible queue
if (intent.hasExtra ("action")) {
boolean cancel = intent.getStringExtra ("action"). Equals ("cancel");
if (cancel) {
return;
}
}
...
Get your inputStream from HttpUrlConnection or whatever
...
while ((bytesRead = in.read(buffer)) > 0) {
if (isCanceled) {
isCanceled = false;
break;
}
...
}
}
}
उत्तर और साथ
Intent intent = new Intent(context, SyncService.class);
intent.putExtra("action", "cancel");
context.startService(intent);
आप अपने प्रश्न से अपने समाधान को हटाने और इसके बजाय इसे समाधान के रूप में प्रदान करने पर विचार कर सकते हैं। – jbaums