android - 如何停止 IntentService

标签 android android-intent android-service intentservice

我搜索了很多,但我不知道如何在单击按钮时停止 IntentService。我有一个启动 IntentService 的按钮,然后 progressDialog 显示通过 ResultReceiver 我取回数据。这个应用程序搜索并显示来自设备的照片,所以我认为 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;
    }
}

扫描服务:

 @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);
}

最佳答案

从服务外部:(例如按钮点击)

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

从服务内部:

stopSelf();

调试工具:
为了检查您的服务/IntentService 是否存在,请使用此 ADB 命令(从命令行):

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

关于android - 如何停止 IntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957219/

相关文章:

Android CGM收到推送通知后启动Activity

java - WatchFaces 未配置

android - 如何在显示之前完成一个 Activity ?

java - 将字符串转换为 double 后无法在谷歌地图中放置标记

android - HTTP 登录的 AsyncTask() 不起作用

android - 如何在不显示通知的情况下 startForeground()?

android - 使服务生命周期独立于 Activity

java - LayoutParams 上的 ClassCastException 从 LinearLayout 到 AbsListView

android - 未收到任何类型为 TYPE_TOUCH_INTERACTION_START 的 AccessibilityEvent

android - 注销并关闭 Android 中的所有 Activity