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将被调用两次,可能同时调用。

最后,我认为您将很难实现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 回答