在Android应用程序中不清楚线程的行为(使用UI)

时间:2015-11-07 17:07:48

标签: java android multithreading user-interface handler

人。我的Android应用程序中存在线程问题。 initializeGame()是主要方法:

public void initializeGame()
    {
        Thread thread = new Thread(new onePoint());
        thread.start();
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    }

class,我在描述这个帖子:

class onePoint implements Runnable {
        (...)
        public void run() {
            (...)

            setBackgroundColorOnButton(...); 
            while (...) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                (...)

                if (...) {
                    setOpacityOnButton(...);
                }
            }
        }

在“(...)”的地方,只有变量的工作。 你看,有两种方法:setBackgroundColorOnButton()和setOpacityOnButton()。

我会告诉他们:

void setBackgroundColorOnButton(int id, int num) {
              int color = Color.parseColor("#cccaca");

                switch (num) {
                    case 1: color = Color.RED; break;
                    case 2: color = Color.parseColor("#FF4F38"); break;
                    case 3: color = Color.YELLOW; break;
                    case 4: color = Color.GREEN; break;
                    case 5: color = Color.BLUE; break;
                    case 6: color = Color.parseColor("#09256C"); break;
                    case 7: color = Color.parseColor("#690069"); break;
                }

                final int col = color;

                Message message = backgroundColorOnButton.obtainMessage();
                message.obj = new int[] {id, col};
                backgroundColorOnButton.sendMessage(message);
            }

    void setOpacityOnButton(int id, final int opacity) {
            Message message = opacityOnButton.obtainMessage();
            message.obj = new int[] {id, opacity};
            opacityOnButton.sendMessage(message);
        }

在这种方法中,我正在向2个处理程序发送消息,这些处理程序在onCreate()中有描述:

backgroundColorOnButton = new Handler() {
            public void handleMessage(Message msg) {
                int[] a = (int[]) msg.obj;

                Button btn = (Button) findViewById(a[0]);

                GradientDrawable drawable = (GradientDrawable) btn.getBackground();
                drawable.setColor(a[1]);

            }
        };

        opacityOnButton = new Handler() {
          public void handleMessage(Message msg) {
              int[] a = (int[]) msg.obj;

              Button btn = (Button) findViewById(a[0]);

              if (a[1] != 0) {
                  btn.setText(Integer.toString(a[1]));
              }
              else {
                  btn.setText("");
              }
          }
        };

在onCreate()方法中,我也创建了ui元素。

我的问题:在方法onCreate()中我调用了initializeGame(),我需要在应用程序启动后看到ui更改,但我没有看到它5秒钟。这是一个白色的屏幕,在5秒钟,然后ui开始改变。我做错了什么?

0 个答案:

没有答案