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

标签 android handler runnable ui-thread

我编写了一个每 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/

相关文章:

android按钮文本和html

安卓房间 : Handling Relations with LiveData

android - 从 Google plus 集成中的另一项 Activity 中注销是行不通的

c# - 拦截并更改应用程序生成的 sql 查询

java - 如何在运行时更改线程的 Runnable 目标

android - 协议(protocol)错误(无法读取状态): Undefined error: 0

java - GWT - 从小部件获取按钮的 "addClickHandler"

javascript - 如何在 EXT JS 中查找/区分成功和失败

java - 如何使运行代码能够访问触发器中提供的变量的可运行

java - 如何在 Android 上的 Java 中每两秒执行一次函数?