2

私はAndroidを初めて使用しますが、この問題が発生しました...バックグラウンドでプロセスを実行するには無限ループが必要ですが、ソケット接続を受け入れるには別の無限ループが必要です。ボタンがクリックされたら、一部のサーバーへのソケット接続。

私が見つけることができるほとんどすべての例とチュートリアルは、単一のスレッドを作成する方法を示しています。

runnableを使おうとしました(これはフォアグラウンドで実行されているようですか?)

Runnable r=new Runnable() { 
  public void run()  { 
    while(true){}
  } 
}; r.run(); 

そして私はAsyncTaskを使おうとしました(これはバックグラウンドで実行されますが、アクティビティごとに1つのAsyncTaskのみですか?)

private class Run extends AsyncTask<Void, Void, Void> {
  protected Void doInBackground(Void... params) {
  }
}

しかし、私が何をするにしても、私のプログラムは最初のスレッドしか実行しません。

私の質問は、1つのアクティビティ内でマルチスレッドがマルチ無限ループを実行することは可能ですか?もしそうなら、どのように?

4

3 に答える 3

6

はい、複数のスレッドを作成できます。Runnableインターフェースを実装できます。

    new Thread(new Runnable() {
        public void run() {
            while (true) {
                //code something u want to do & it will run infinitely.
                //Remove the infinite loop for running finite set of operations.        
                Log.i("Thread", "Running parallely");
            }
        }
    }).start();

また、上記のスレッドは無期限に実行されることに注意してください。有限の操作を実行したい場合は、コードをrunメソッド内に配置するだけです。

于 2012-05-19T13:38:02.900 に答える
0

ネットワーク接続をリッスンするスレッドを作成するには

new Thread(new Runnable() {
    public void run()
    {
     ServerSocket s = new ServerSocket(PORT_NUMBER);
     while(true)
      {
         Socket c = s.accept();
         // read the socket
          BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
          in.read();
       }
      c.close(); //close the socket
    }
 }).strat();
于 2012-05-19T13:52:03.673 に答える
0

バックグラウンドスレッドからUIスレッドを呼び出したい場合があります。あなたはこのようにそれを行うことができます:

        Thread t = new Thread(new Runnable() {
                public void run() {
                //Do your background thing here

                 getActivity().runOnUiThread(new Runnable() {
                        public void run() {
                            //Update your GUI here
                        }
                 });
         t.start();

そして、getActivityは次のようになります。

          public class YourClass extends AppCompatActivity{

                   private Activity getActivity(){
                        return this;
                   }
                  //Rest of class here
          }
于 2017-07-05T12:39:56.677 に答える