Как создать / запустить асинктюз в обслуживании без родонограммы ()

StackOverflow https://stackoverflow.com/questions/3464293

Вопрос

у меня есть Service Это создает AsyncTasks для загрузки файлов. В мероприятиях мы создаем Runnableили Threadс того, что мы переходим к Activity.runOnUiThread(). Отказ Я не могу получить доступ к этому методу от сервиса, так как я использую AsyncTask Правильно, (делать тяжелую работу, не блокируя нить UI)?

Это было полезно?

Решение

Если ваш сервис вызывается только из вашего приложения, и вы можете сделать его Singleton, затем попробуйте это:

public class FileDownloaderService extends Service implements FileDownloader {
    private static FileDownloaderService instance;

    public FileDownloaderService () {
        if (instance != null) {
            throw new IllegalStateException("This service is supposed to be a singleton");
        }
    }

    public static FileDownloaderService getInstance() {
        // TODO: Make sure instance is not null!
        return instance;
    }

    @Override
    public void onCreate() {
        instance = this;
    }

    @Override
    public IBinder onBind(@SuppressWarnings("unused") Intent intent) {
        return null;
    }

    @Override
    public void downloadFile(URL from, File to, ProgressListener progressListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // Perform the file download
            }
        }).start();
    }
}

Теперь вы можете напрямую позвонить методы на вашем обслуживании. Так что просто позвоните downloadFile() поставить услугу на работу.

О тебе настоящий Вопрос о том, как обновить пользовательский интерфейс. Обратите внимание, что этот метод получает ProgressListener пример. Это может выглядеть так:

public interface ProgressListener {
    void startDownloading();
    void downloadProgress(int progress);
    void endOfDownload();
    void downloadFailed();
}

Теперь вы просто обновите UI из активности (не от службы, которые остаются не знать, как выглядит пользовательский интерфейс).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top