2016-12-04 116 views
1

我搜索了很多,但我不知道如何停止按鈕點擊IntentService。我有一個按鈕,啓動IntentService然後progressDialog顯示通過ResultReceiver我得到數據回來。這個應用程序搜索和顯示設備的照片,所以我認爲IntentService是正確的方式來做到這一點。但是我想在取消按鈕上停止它。這是否有一些例子或好的做法?如何停止IntentService

MainAcitivity

@Override 
public final void onReceiveResult(final int resultCode, final Bundle resultData) { 
    switch (resultCode) { 
     case ScanService.STATUS_RUNNING: 
      progressDialog = new ProgressDialog(MainActivity.this); 
      progressDialog.setMessage("Loading..."); 
      progressDialog.setCancelable(false); 
      progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
//something to stop 
       } 
      }); 
      progressDialog.show(); 

      break; 
     case ScanService.STATUS_FINISHED: 
      progressDialog.dismiss(); 
      listOfPictures = resultData.getParcelableArrayList(DATA_KEY); 
      break; 

     case ScanService.STATUS_ERROR: 
      final String error = resultData.getString(Intent.EXTRA_TEXT); 
      Toast.makeText(this, error, Toast.LENGTH_LONG).show(); 
      break; 
    } 
} 

ScanService:

@Override 
public int onStartCommand(final Intent intent, final int flags, final int startId) { 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
protected void onHandleIntent(final Intent intent) { 
    final ResultReceiver scanResultReceiver = intent.getParcelableExtra(RECEIVER_KEY); 
    final Bundle bundle = new Bundle(); 
    scanResultReceiver.send(STATUS_RUNNING, bundle); 

// some work here 

    bundle.putParcelableArrayList(DATA_KEY, new ArrayList<>(listOfPictures)); 
    scanResultReceiver.send(STATUS_FINISHED, bundle); 
} 
+0

http://stackoverflow.com/questions/12112998 /停止意圖服務從活動 – Sangeeta

回答

1

從外服:(例如按鈕點擊)

stopService(new Intent(context(), MyIntentService.class)); 

從服務中:

stopSelf(); 

調試工具:
爲了檢查,如果你的服務/ IntentService是活過來的這ADB命令(命令行):

adb shell service list |grep <my.app.packagename> 
+0

有沒有辦法檢查服務是否提前停止或完成? – hyrulelink16

+0

是的,當onHandleIntent()完成時,服務會調用stopSelf(),你可以在onHandleIntent()的末尾添加一個日誌,看看這個日誌是否被寫入,如果不是該服務被提前停止。 –

+0

我加了stopService(myintent);在OnClick監聽器中,並在服務的ondestroy中使用stopSelf()。無論如何,在handleIntent日誌的末尾都會被記錄。我試過了,它並沒有停止服務。 – hyrulelink16