gpt4 book ai didi

android - 将 handler.post(new Runnable());在 Android 中创建新线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:14 26 4
gpt4 key购买 nike

我编写了一个每 3 秒更改一次应用程序背景的小应用程序。我使用 Handler 和 Runnable 对象来实现这一点。它工作正常。这是我的代码:

  public class MainActivity extends Activity {

private RelativeLayout backgroundLayout;
private int count;
private Handler hand = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button clickMe = (Button) findViewById(R.id.btn);

backgroundLayout = (RelativeLayout) findViewById(R.id.background);

clickMe.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

count = 0;

hand.postDelayed(changeBGThread, 3000);

}
});

}

private Runnable changeBGThread = new Runnable() {

@Override
public void run() {

if(count == 3){
count = 0;
}

switch (count) {
case 0:
backgroundLayout.setBackgroundColor(getResources().getColor(android.R.color.black));
count++;
break;

case 1:
backgroundLayout.setBackgroundColor(Color.RED);
count++;
break;

case 2:
backgroundLayout.setBackgroundColor(Color.BLUE);
count++;
break;

default:
break;
}

hand.postDelayed(changeBGThread, 3000);

}
};
}

这里我在非 UI 线程中更改 UI 背景,即 backgroundLayout.setBackgroundColor(Color.RED); inside run();它是如何工作的?

最佳答案

Runnable 不是后台线程,它是可以在给定线程中运行的工作单元。

Handler 不会创建新线程,它会绑定(bind)到它在其中创建的线程(在本例中为主线程)的循环器,或者绑定(bind)到您在构造期间为其提供的循环器。

因此,您没有在后台线程中运行任何东西,您只是在处理程序上排队一条消息,以便稍后在主线程上运行

关于android - 将 handler.post(new Runnable());在 Android 中创建新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19158311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com