2017-11-25 18 views
0

私はメソッドを持っています。このメソッドの内部では、Executorsによってタスクを実行します。その作業はサーバーからデータを取得し、Arraylistの結果を入力します。countinue Executors.newFixedThreadPoolの終了後のメソッド

public Paginator(String secSrv, int total, ExecutorService executorService, Cookie cookie) { 
    securitySrv = secSrv; 
    totalItems = total; 
    this.executorService = executorService; 
    this.cookie = cookie; 
} 

ArrayList<Suser> results = new ArrayList<>(); 

public ArrayList<Suser> generatePage(int currentPage) { 

    fetchAllUsers(currentPage); 
    ...... 
    for (int i = startItem; i < startItem + numOfData; i++) { 
      pageData.add(results.get(i-1)); 
     } 

充填の結果は、私はこのarraylist.howを使用する必要がExecutorServiceのは、その仕事を終えて、私は再び私の方法を継続することができます。ここで、iは知っているcoud ArrayListの後?

private void fetchAllUsers(final int currentPage) { 

    Runnable fetchUserListFromSrv = new Runnable() { 
     @Override 
     public void run() { 
      android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); 
      JSONObject count = new JSONObject(); 
      try { 
       count.put("count", 10); 
       count.put("page", currentPage); 
       String SearchUsersPagingResult = ... 
       results.addAll(susers) ; 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }; 

    executorService.submit(fetchUserListFromSrv); 
} 

答えて

1

ドキュメントを使用してください。すべての答えがここにあります。

Future| Android developers

ExecutorService| Android developers

+0

男私はこれに私のコードを変更し、すべてがok.httpです://codepad.org/C9swPyU5。あなたは私に説明することができますか?このメソッドはメインスレッドを保持し、メインスレッドを再開した後、そのジョブを終了しましたか? – Groot

+0

Futureは、非同期計算の結果を表します。Callableインターフェイスは、インスタンスが別のスレッドによって実行される可能性のあるクラス用に設計されている点でRunnableに似ています。したがって、あなたの質問への答えはNOです。fetchAllUsers()メソッドはメインスレッドをブロックしません。 –

+0

しかし、なぜ私のスレッドがその仕事を終えるまでメインメソッド 'generatePage(int currentPage)'に他のコードが実行されないのですか?これらのコードをメインメソッドに実行するとエラーが出ますか? – Groot

関連する問題