4

私の問題は、アクティビティがあり、そこに read_list メソッドの結果を取得したいということです。ただし、 read_list メソッドは完了するまでに時間がかかるため、新しいスレッドを作成し、これを使用してこのメ​​ソッドを実行し、メイン アクティビティに戻します。AsyncTask と同様に smt を実行できることはわかっていますが、今はこの方法で実行したいと考えています。

  public class Read<T> implements Runnable(){

    Thread t;
    read(){
         t = new Thread(this);
         t.start();
    }


    public void run(){

       read_list();
    }


    public ArrayList<T> read_list(){

       ..........
       return ArrayList<T>
    }



 }

主な活動:

 public Name extends Activity{

    .
    .
    .

    Read<Data> read = new Read<Data>();
    read.read_list();

 }

質問: 前述のコードで、新しいスレッドをアクティブにして read_list メソッドを実行しますか? または、メソッドはメインスレッドで実行されますか?

4

2 に答える 2

1

質問: 前述のコードで、新しいスレッドをアクティブにして read_list メソッドを実行しますか? または、メソッドはメインスレッドで実行されますか?

新しいスレッドのみThread.startを開始し、その新しいスレッドでオブジェクトのrunメソッドを呼び出します。いいえ、read.read_list()別のスレッドでは実行されません。

しかし:

read(){
     t = new Thread(this);
     t.start();
}

Read私はそれがコンストラクタであると想定しています。それも結果を呼び出しstartrun呼び出しread_listて破棄します。

そのままでread_list、おそらく同時に2 回呼び出されます。

read_list最後に、任意の型のオブジェクトを実装、作成、および埋めるのに苦労することになると思います

于 2012-12-11T23:52:36.143 に答える
1

新しいスレッドは実行されませんが、呼び出しread.read()は新しいスレッドを開始する必要があります

ところで。私は匿名クラスを使用することを好みますが、読みやすいです:

public Name<T> extends Activity{
  .
  .
  .
  private List<T> stuff;

  Runnable read = new Runnable(){
    public void run(){
      ...
      stuff = new ArrayList<T>(..);
    }
  };
  read.start();
}
于 2012-12-11T23:58:50.007 に答える