将Android活动的对象传递给线程类';建造师?
在编写向web服务器提交输入查询的Android活动时,我在想,与其使用匿名内部类来定义网络线程,为什么我们不能使用单独的类来扩展线程 虽然这是预期的效果,但我想知道这是好的还是坏的做法将Android活动的对象传递给线程类';建造师?,android,multithreading,android-activity,Android,Multithreading,Android Activity,在编写向web服务器提交输入查询的Android活动时,我在想,与其使用匿名内部类来定义网络线程,为什么我们不能使用单独的类来扩展线程 虽然这是预期的效果,但我想知道这是好的还是坏的做法 public class GreetActivity extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); se
public class GreetActivity extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_greet_activity);
}
public void onClickBtn(View v){
Thread t = new WorkerThread("http://10.0.2.2:8080",this);
t.start();
}
}
class WorkerThread extends Thread{
private String targetURL;
private Activity activity;
public WorkerThread(String url, Activity act){
this.activity = act;
this.targetURL = url;
}
public void run(){
TextView tv = (TextView) activity.findViewById(R.id.textview1);
. . . . . .
}
}
在您的情况下,不是这样,因为只有
UI线程
可以触摸UI,您的代码会使应用程序崩溃
android.view.ViewRoot$CalledFromWrongThreadException
活动
引用传递给线程有一些警告。活动生命周期与线程生命周期是分开的。活动可以通过方向更改事件等方式进行销毁和重新创建。如果活动引用保存在线程中,则该活动所保存的资源(例如大量位图资产,占用大量内存)不可垃圾回收
非静态内部类也有同样的问题,因为对父类的引用是隐式的
工作解决方案是在销毁活动时清除活动引用,并在重新创建活动时提供新的活动引用值得一提的是,一个
异步任务
比一个简单的线程
更容易使用,谢谢您提供的信息。然而,当我执行代码时,它成功地执行了。我将尝试了解更多的原因,并更新线程。这是寻找一个视图。改变内容是错误的@拉尔托的回答真的很好