[英]how to pass a thread class object from activity to activity using parcelable
[英]Is it a good practice to pass an object of Android Activity to a Thread class' constructor?
在編寫一個向Web服務器提交輸入查詢的Android活動時,我想的是沒有匿名內部類來定義網絡線程,為什么我們不能使用擴展Thread的單獨類。
雖然這可以按預期工作,但我想知道這是否屬於任何好的或壞的做法。
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 Thread
可以觸摸UI,您的代碼將使您的應用程序崩潰
android.view.ViewRoot$CalledFromWrongThreadException
將一個Activity
引用傳遞給一個線程有一些警告。 活動生命周期與線程生命周期是分開的。 可以通過例如方向改變事件來銷毀和重建活動。 如果活動引用在一個線程中保留,那么活動所擁有的資源(例如,大量位圖資產占用大量內存)不是垃圾收集的。
非靜態內部類也具有相同的問題,因為對父項的引用是隱式的。
工作解決方案是在銷毀活動時清除活動引用,並在重新創建活動時提供新的活動引用。
您只能觸摸blackbelt提到的UI線程中的UI小部件。
對於它的價值, AsyncTask
比簡單的Thread
更容易使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.