0

我有这个class创建线程,但我想将其转换classService希望它不会在方向改变时被破坏。

这是课程:

public class Getter {

    private final String ip;
    private final int amount, poolSize;
    private Vector<Integer> results = new Vector<Integer>();
    private final ExecutorService es;
    private Collection<Future<?>> futures = new LinkedList<Future<?>>();


    public Getter(String ip, int amount, int poolSize) {
        this.ip = ip;
        this.amount = amount;
        this.poolSize = poolSize;
        es = Executors.newFixedThreadPool(this.poolSize);

    }

    public boolean working() {
        boolean work = false;
        for (Future<?> future : futures) {
            if (!future.isDone()) {
                work = true;
            }
        }
        return work;
    }

    public Vector<Integer> getResults() {
        Collections.sort(results);
        return results;
    }

    public int threads(){
        return poolSize;
    }

    public void start() {

        for (int i = 0; i <= amount; i++) {
            futures.add(es.submit(new Get(ip)));
        }

        es.shutdown();

    }

    public void stop(){
        for (Future<?> future : futures) {
            future.cancel(true);
        }
    }

    private class Get implements Runnable { 

        private String ip;

        private Get(String ip) {
            this.ip = ip;
        }

        public void run() {
            try {
                // network stuff
                // adds result to results Vector.
            } catch (Exception ex) {

            }
        }
    }                                       
}

那么这是否class有可能转换成Service这样,一旦启动,它无论如何都会在后台运行?

4

3 回答 3

0

您可以将其添加到清单文件中,以阻止您的应用在方向更改时被破坏:

android:configChanges="orientation"

但是,如果您想创建服务,则只需复制此示例: http://developer.android.com/reference/android/app/Service.html 您可以将类添加到服务中,然后只需将访问器添加到您的服务中联系。

您还可以在清单文件中添加一些内容,让您的服务在设备打开时启动,请参阅此处 尝试在 Android 上启动服务

于 2012-08-16T11:14:12.353 回答
0

如果您想要一个Service“无论如何”运行的,您可能希望将其设置为foreground

于 2012-08-16T11:17:34.283 回答
0

是的。我认为这将是一个很好的IntentService。您的下一个最佳选择可能是AsyncTask

更多的:

一般来说,我会说,如果后台任务的行为与启动它的任何东西(例如,Activity、Fragment、Service 等)密切相关,那么将其设为 AsyncTask。如果它是自包含的并且旨在以模块化方式为多个不同的组件提供服务,则将其设为服务。无论哪种情况,AsyncTask 或 IntentService 都很容易制作。

于 2012-08-16T11:04:35.320 回答