2011-10-18 5 views
0

私は多くのタスクを持っていますが、それらを処理するにはマルチスレッドを使用すべきです、最良のソリューションは何ですか?私は使用できますスレッドの数は最小ですが、時間。アンドロイドについてマルチスレッドプロセス

+0

AsyncTaskはあなたを助けます。 –

答えて

1

私はAsyncTaskがあなたに役立つと思います。あなたはこの良い説明と例の中で、それについての詳細をAndroid - AsyncTaskで見つけることができます。

そして、あなたはThreadを使用する場合、あなたはすべてのスレッドを管理する必要があり、また、ハンドラとAsyncTaskの違い

not to blocking the UI Thread.について確認してください...

1.ハンドラが関連付けられていますアプリケーションの主なスレッドと一緒に。それは、 のメッセージとランナブルをバックグラウンドスレッドからアプリのメインスレッドに送信し、スケジュールします。

2.AsyncTaskは、時間のかかる操作でUIを更新せずにUIを更新するために、バックグラウンドスレッドを処理する簡単な方法を提供します。

答えは、どちらもバックグラウンドスレッドからUIを更新するために使用できますが、その違いは実行シナリオにあります。遅延したメッセージを投稿するか、特定の順序でMessageQueueにメッセージを送信するハンドラを使用することを検討することができます。

アプリのメインスレッドとバックグラウンドスレッドの間でパラメータを交換(つまりUIを更新)したい場合は、AsyncTaskの使用を検討してください。

Example for Threads, Handlers and AsyncTask in Android

ありがとうございました。

0

サービスとAsyncTaskを同じように見てください。あなたがNDKでpthreadを使っていない限り、純粋なスレッドを扱うよりも優れています。

+0

私はhandleThraedを使いたいです。 – farmer

0

アンドロイドでのマルチスレッド化を行うために多くの方法があります。

私はhandlerThreadを使用して、あなたのUIとあなたのスレッドとのやりとりを容易にするためのツールを提供したいと思います。たとえば :

public class MyThread extends HandlerThread implements Callback 
{ 
    public MyThread() 
    { 
     super(ThreadDP.class.getSimpleName(), Process.THREAD_PRIORITY_DISPLAY); 
     this.start(); 
    } 

    @Override 
    protected void onLooperPrepared() 
    { 
     super.onLooperPrepared(); 
    } 

    @Override 
    public boolean handleMessage(Message msg) { 
     switch (msg.what) 
     { 
      case 1 : 
       this.doA(); 
       return true; 

      //Message 2 let's call doB() 
      case 2 : 
       this.doB(); 
       return true; 

      default: 
       return false; 
     } 
    } 

    //Implement doA() and doB() 
} 

この単純なスレッドがあなたの活動や、他のスレッドによって送信されたメッセージを処理することができます。ハンドルシステムはかなり高速です(私は25fpsのmjpegを問題なしで得ることができます)。

おそらくもっと良い解決策(私はエキスパートではありません)がありますが、最大5つの同時スレッド受信、ネットワーク上のデータを送信して魅力的に動作させることができます。

関連する問題