Android 在执行过程中需要启动和取消流程时,IntentService是正确的选择吗?

Android 在执行过程中需要启动和取消流程时,IntentService是正确的选择吗?,android,android-asynctask,android-service,android-intentservice,android-handlerthread,Android,Android Asynctask,Android Service,Android Intentservice,Android Handlerthread,我需要在后台从外部存储器读取所选文件,然后使用通用图像加载器下载图像,在从外部存储器读取文件的过程中或在图像下载过程中,用户应该可以选择从外部存储器读取另一个文件,然后下载图像,从而取消该过程。 我使用IntentService从外部存储器读取文件 startService()当我需要取消当前读取过程并启动所选文件的读取过程时,这是正确的方法吗?或者我需要使用HandlerThread/Service/Thread private void startResService() { mySe

我需要在后台从外部存储器读取所选文件,然后使用通用图像加载器下载图像,在从外部存储器读取文件的过程中或在图像下载过程中,用户应该可以选择从外部存储器读取另一个文件,然后下载图像,从而取消该过程。 我使用IntentService从外部存储器读取文件 startService()当我需要取消当前读取过程并启动所选文件的读取过程时,这是正确的方法吗?或者我需要使用HandlerThread/Service/Thread

private void startResService() {
   myServiceIntent = new Intent(activity, ResService.class);
   stopResService();
   mServiceIntent.putExtra("cancelDownload", false);
   startService(mServiceIntent);
}

 private void stopResService() {
    mServiceIntent = new Intent(this,ResService.class);
    mServiceIntent.putExtra("cancelDownload", true);
    startService(myServiceIntent);
}




 private void onHandleIntent(Intent intent) {
    Bundle bundle = intent.getExtras();
    boolean isCanceled = false;
    if (bundle != null) {
        isCanceled = bundle.getBoolean("cancelDownload");
    }

    if (!isCanceled) {
        readRes();
    }
}

这取决于几件事,如果您需要立即在UI上显示下载的图像,您可以使用AsyncTask,因为使用UI线程更容易(工作量更少)。如果你需要在后台工作,即使用户关闭(或其他事件导致将你的应用程序置于后台),那么你应该使用IntentService当应用程序读取文件时,它不应该在UI线程上显示任何内容,而在UIL实现的图像下载过程中,它应该显示图像下载计数的过程。如果应用程序在后台运行,则应停止运行,如果应用程序未被终止,则返回时应继续运行@Doublek此下载计数程序显示,这意味着您可以与UI交互,但由于您需要暂停/恢复下载,因此使用IntentService可能比使用AsyncTask更容易,虽然暂停/恢复会给你更多的工作,而不仅仅是在后台下载,即使你的应用程序进入后台,但上述方法是实现启动/停止服务的正确方法吗?为了显示UIL listener的计数过程,我使用了BroadcastReceiver@DoubleKYes,startResService和stopResService将在其他课程中,一些活动,对吗?否则你不能称他们为私人,但其他一切都应该是好的。您可能需要在readRes中使用类成员变量或将其作为param传递,因为readRes中的代码将位于另一个读取文件和下载图像的线程中,并且它不会仅在(!isCancelled)时停止,这将防止再次启动相同的事情。我希望你们明白我想说什么?这取决于几件事,若你们需要立即在UI上显示下载的图像,你们可以使用AsyncTask,因为使用UI线程更容易(更少的工作)。如果你需要在后台工作,即使用户关闭(或其他事件导致将你的应用程序置于后台),那么你应该使用IntentService当应用程序读取文件时,它不应该在UI线程上显示任何内容,而在UIL实现的图像下载过程中,它应该显示图像下载计数的过程。如果应用程序在后台运行,则应停止运行,如果应用程序未被终止,则返回时应继续运行@Doublek此下载计数程序显示,这意味着您可以与UI交互,但由于您需要暂停/恢复下载,因此使用IntentService可能比使用AsyncTask更容易,虽然暂停/恢复会给你更多的工作,而不仅仅是在后台下载,即使你的应用程序进入后台,但上述方法是实现启动/停止服务的正确方法吗?为了显示UIL listener的计数过程,我使用了BroadcastReceiver@DoubleKYes,startResService和stopResService将在其他课程中,一些活动,对吗?否则你不能称他们为私人,但其他一切都应该是好的。您可能需要在readRes中使用类成员变量或将其作为param传递,因为readRes中的代码将位于另一个读取文件和下载图像的线程中,并且它不会仅在(!isCancelled)时停止,这将防止再次启动相同的事情。我希望你明白我想说什么?