2012-08-16 39 views
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所以它會在後臺運行,不管是什麼,一旦它開始了嗎?

回答

0

是的。我認爲這會使IntentService好。您的下一個最佳選擇可能是AsyncTask

更多:

一般來說,我會說,如果後臺任務的行爲是緊密聯繫在一起的任何啓動它(例如,活動片段,服務,等等),然後使它的的AsyncTask。如果它是獨立的,並且意味着以模塊化的方式爲多個不同的組件提供服務,那就把它變成服務。無論哪種情況,AsyncTask或IntentService都很容易製作。

+0

任何想法將我的課程轉換爲服務有多複雜?我有一些關於服務的經驗,但沒有任何關於asynctask的經驗。哪兩個更好用,哪個最容易使用? – 2012-08-16 11:27:02

0

,你可以將它添加到停止你的應用程序被破壞掉的方向變化的清單文件:

android:configChanges="orientation" 

,但如果你想使一個服務的話,只要複製這個例子: http://developer.android.com/reference/android/app/Service.html 您可以添加類的服務,然後只需將一個訪問者添加到您的服務連接。

如果你想有一個Service它運行「無論什麼」你也可以添加一些清單文件,讓你的服務啓動時,該設備已打開 看到這裏 Trying to start a service on boot on Android