Runnable 接口是 Thread 类的父类,run() 是 Runnable 接口的方法
所以通常我们应该更喜欢 Runnable 接口而不是扩展线程类,因为我们不想改变类的行为,我们也可以扩展另一个类。它也有助于实现松散耦合,并且我们有改变用户界面的好处从任何其他班级。
我们可以通过 4 种方式更改 Ui
1.使用Handler示例
public class MainActivity extends AppCompatActivity {
private Handler mainHandler=new Handler();
class ExampleRunnable implements Runnable {
int seconds;
public ExampleRunnable(int seconds) {
this.seconds = seconds;
}
@Override
public void run() {
for (int i = 0; i < seconds; i++) {
mainHandler.post(new Runnable() {
@Override
public void run() {
button.setText("50% process completed");
}
});
2.通过使用runOnUIThread(),我们必须将runOnUIThread附加到帖子中,通过示例可以很容易理解
class ExampleRunnable implements Runnable {
int seconds;
public ExampleRunnable(int seconds) {
this.seconds = seconds;
}
@Override
public void run() {runOnUIThread.post(new Runnable() {
@Override
public void run() {
button.setText(" Runnable");
}
});
}
3.通过使用我们可以通过任何视图调用的任何视图,我在这里用 switch 调用过
public class MainActivity extends AppCompatActivity {
private Switch aSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
aSwitch=findViewById(R.id.switch1);
class ExampleRunnable implements Runnable {
int seconds;
public ExampleRunnable(int seconds) {
this.seconds = seconds;
}
@Override
public void run() { aSwitch.post(new Runnable() {
@Override
public void run() {
button.setText(" Runnable");
}
});
}
4.通过在另一个线程中创建 Handler,我们必须定义 Looper,因为默认情况下它会将我们附加到我们的线程 Looper
Handler threadHandler=new Handler(Looper.getMainLooper());
threadHandler.post(new Runnable()
{
@Override
public void run() {
button.setText(" Runnable");
}
});
}
这是 4 种实现方式,所以我认为您现在可能会了解可运行线程和 runOnUIThread() 以及 Handler 是由其他人编写的精美。