एक एंड्रॉइड गतिविधि लिखते समय जो प्रस्तुत करता हैएक वेब सर्वर के लिए इनपुट क्वेरीज़, मैं नेटवर्किंग थ्रेड को परिभाषित करने के लिए एक अनाम आंतरिक वर्ग होने के बजाय सोच रहा था, "थ्रेड को विस्तारित करने वाले एक अलग वर्ग का उपयोग क्यों नहीं कर सकता।"
जबकि यह उम्मीद के मुताबिक काम करता है, मैं जानना चाहता हूं कि क्या यह किसी अच्छे या बुरे अभ्यास का है।
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);
. . . . . .
}
}
उत्तर:
उत्तर № 1 के लिए 1पासिंग ए
Activity
एक धागे के संदर्भ में कुछ चेतावनी दी गई है। गतिविधि जीवनचक्र थ्रेड जीवनचक्र से अलग होता है। गतिविधियों को नष्ट किया जा सकता है और उदा। अभिविन्यास परिवर्तन घटनाओं द्वारा। यदि गतिविधि संदर्भ एक थ्रेड में है, तो गतिविधि द्वारा रखे गए संसाधन (उदाहरण के लिए बहुत सारी बिटमैप संपत्ति, बहुत सी मेमोरी लेना) कचरा संग्रहण योग्य नहीं हैं।एक गैर-स्थिर आंतरिक वर्ग में भी यही समस्या है क्योंकि माता-पिता का संदर्भ निहित है।
एक कार्य समाधान गतिविधि के संदर्भ को साफ़ करने के लिए होता है जब गतिविधि नष्ट हो जाती है, और गतिविधि के फिर से तैयार होने पर एक नया गतिविधि संदर्भ प्रदान करता है।
ब्लैकबेल्ट द्वारा बताए गए यूआई थ्रेड में आप केवल अपने यूआई विजेट को छू सकते हैं।
किस लिए यह मूल्य है, ए AsyncTask
एक नंगे हड्डियों की तुलना में काम करना आसान है Thread
.
उत्तर № 2 के लिए 1
आपके मामले में, नहीं, यह नहीं है, केवल के बाद से UI Thread
UI को छू सकता है, आपका कोड आपके एप्लिकेशन को क्रैश कर देगा
android.view.ViewRoot$CalledFromWrongThreadException