android - 在android中一次运行多个服务

标签 android service

我正在开发一个包含多个选项卡的 Android 应用程序。我的标签有以下内容。

第一个选项卡 - 它以 GridView 显示杂志的文件。目的是当我点击 GridView 项目时,我需要从网站下载一个大文件。为此,我创建了一项服务,该服务具有可下载文件的 ASYNC 任务。我已经展示了代码。

 public class DownloadArchivesService extends BaseService {
private static final String TAG = "DownloadArchivesServices";
private static final String STOP = "stop_modificator";
public static final String ALREADY_RUNNING= "DownloadArchivesService_Already_Running";
public  static final String ARCHIVES_PERCENTAGE_PROGRESS ="Archives_Percentage_Progress";
public  static final String UPDATE_ARCHIVES_PROGRESS = "Update_Archives_Progress";

 @Override
public void onCreate() {
            getPreferences().edit().putBoolean(ALREADY_RUNNING,   true).commit();
    application = (JfwApplication)this.getApplicationContext();
    context = this;
    session = application.getSession();
    calendar = Calendar.getInstance();
    dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
    magazineManager = new MagazineManager(this);

    //magazine = new Magazine(fileName, fileName, "", "", this);


    new AsyncTask<String, Integer, String>() {

    NumberFormat formater = NumberFormat.getPercentInstance(Locale.getDefault());
    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        //  I do my download here       }

    @Override
    protected void onProgressUpdate(Integer... p) {
        if (isCancelled()) {
            return;
        }
        //I udpate my progress bar here     }

    @Override
    protected void onPostExecute(String result) {

        Intent intentInvalidate = new Intent(ArchivesActivity.GRID_INVALIDATE);
        sendBroadcast(intentInvalidate);

        super.onPostExecute(result);
    }
}.execute();

super.onCreate();


}

当我导航到第二个选项卡时,我需要从网站下载几张照片并将其显示在屏幕上。我写了一个类似于上面的服务——DownloadImagesService。

但问题是当上面提到的 DownloadArchivesService 正在运行时,(即,当我有 点击 GridView 项调用 DownloadArchivesService)并导航到第二个选项卡下载照片,DownloadImageService(下载照片的服务)不会被调用,它会等到 DownloadArchivesService 完成。这将使用户在第一个服务完成之前等待一段时间。我知道这些服务将在主线程中运行,并且一项服务需要等待已经执行的服务执行。 有没有办法同时运行不同的服务(或后台任务)而无需等待先前正在执行的服务。

我确实浏览了有关服务、 Intent 服务和线程的各种文档。但是我无法理解关于 andorid 如何处理并发服务的特殊情况。

我将不胜感激任何帮助。如果我的解释不清楚,请告诉我。

谢谢。

最佳答案

从 Android 4.0+ 开始,AsyncTask 被赋予一个执行线程。所以第二个 AsyncTask 将在第一个完成后运行。

参见 Multiple Async Task not running in android 4.1了解如何处理它们。

关于android - 在android中一次运行多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504352/

相关文章:

service - 横切需求/关注点在编程中意味着什么?

java - 删除 Android 中 View 之间的空间或更改颜色

java - 重新安装Android Studio打不开

Angular 2 : how to correctly change the template's variable via service?

mongodb - 在窗口 8 上安装 mongodb

java - AccessibilityService 对 OnKeyEvent() 没有响应

android - 对 AAssetManager_fromJava 的 undefined reference

Android 应用程序在 DEBUG 模式下运行良好,但在 RUN 模式下运行不佳

android - Firebase 多个子监听器

javascript - Angular2 服务呈现 HTML