0

classスレッドを作成するこれがありますが、方向の変更時にスレッドが破壊されないように変換classしたいと考えています。Service

クラスは次のとおりです。

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でしょう。

もっと:

一般的に、バックグラウンド タスクの動作がそれを開始するもの (アクティビティ、フラグメント、サービスなど) と密接に関連している場合は、それを AsyncTask にします。自己完結型で、いくつかの異なるコンポーネントをモジュラー方式で提供することを意図している場合は、それをサービスにします。どちらの場合でも、AsyncTask または IntentService は非常に簡単に作成できます。

于 2012-08-16T11:04:35.320 に答える