มีหลายเทคนิคในการใช้ runOnUiThread () ให้ดูทั้งหมด
นี่คือเธรดหลักของฉัน (เธรด UI) เรียกว่าAndroidBasicThreadActivityและฉันจะอัปเดตจากเธรดผู้ปฏิบัติงานด้วยวิธีต่างๆ -
public class AndroidBasicThreadActivity extends AppCompatActivity
{
public static TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_basic_thread);
textView = (TextView) findViewById(R.id.textview);
MyAndroidThread myTask = new MyAndroidThread(AndroidBasicThreadActivity.this);
Thread t1 = new Thread(myTask, "Bajrang");
t1.start();
}
}
1. ) โดยผ่านอินสแตนซ์ของกิจกรรมเป็นอาร์กิวเมนต์บนเธรดผู้ปฏิบัติงาน
class MyAndroidThread implements Runnable
{
Activity activity;
public MyAndroidThread(Activity activity)
{
this.activity = activity;
}
@Override
public void run()
{
//perform heavy task here and finally update the UI with result this way -
activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
AndroidBasicThreadActivity.textView.setText("Hello!! Android Team :-) From child thread.");
}
});
}
}
2. ) โดยใช้วิธีการโพสต์ของมุมมอง (Runnable runnable) ในเธรดผู้ปฏิบัติงาน
class MyAndroidThread implements Runnable
{
Activity activity;
public MyAndroidThread(Activity activity)
{
this.activity = activity;
}
@Override
public void run()
{
//perform heavy task here and finally update the UI with result this way -
AndroidBasicThreadActivity.textView.post(new Runnable()
{
@Override
public void run()
{
AndroidBasicThreadActivity.textView.setText("Hello!! Android Team :-) From child thread.");
}
});
}
}
3. ) โดยใช้คลาส Handler จากแพ็คเกจ android.os
หากเราไม่มีบริบท (นี่ / getApplicationContext ()) หรืออินสแตนซ์ของกิจกรรม (AndroidBasicThreadActivity.this) จากนั้นเราต้องใช้คลาส Handler ด้านล่าง -
class MyAndroidThread implements Runnable
{
Activity activity;
public MyAndroidThread(Activity activity)
{
this.activity = activity;
}
@Override
public void run()
{
//perform heavy task here and finally update the UI with result this way -
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
AndroidBasicThreadActivity.textView.setText("Hello!! Android Team :-) From child thread.");
}
});
}
}