마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 1초에 한번씩 숫자가 올라가게 하고 싶은데 기다렸다가 한번에 그려지네요

0 추천

저 써져있는 i가 1초마다 0부터 차례대로 올라가게 하고 싶은데 디버깅하면 회색하면으로 아무것도 안뜨다가 10초가 지나면(아마 while문을 다 돌고 나면) 배경 이미지들이랑 같이 i=9로 한번에 그려집니다. AsyncTask도 써보고 별 짓을 다 해봤는데 계속 그러네요 저 이미지들은 xml로 작성하고 자바코드로 작성하지는 않았습니다.

public class MainActivity extends AppCompatActivity{
    private ImageButton mSendMessage;
    private LinearLayout mMessageLog;
    private TextView text;

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

        mMessageLog = (LinearLayout)findViewById(R.id.message_log);

        ExampleThread thread = new ExampleThread();
        thread.start();

    }

    private class ExampleThread extends Thread {
        private static final String TAG = "ExampleThread";
        private TextView text;
        private int i;

        public ExampleThread() {
            // 초기화 작업
            text = new TextView(MainActivity.this);
            mMessageLog.addView(text);
        }

        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // 스레드에게 수행시킬 동작들 구현
                    while(i<10)
                    {
                        try {
                            text.setText("i="+i);
                            i++;
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

 

익명사용자 님이 2017년 2월 19일 질문

2개의 답변

0 추천
android timer 로 구글링하세요
쎄미 (162,410 포인트) 님이 2017년 2월 20일 답변
0 추천
package com.example.sin.timer;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Handler;

public class MainActivity extends AppCompatActivity {

    private int num = 1;
    private TextView textView;
    private Timer timer;

    private final android.os.Handler handler = new android.os.Handler();

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

        textView = (TextView) findViewById(R.id.timer);

        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                update();
            }
        };

        timer = new Timer();
        timer.schedule(timerTask, 0, 1000);
    }

    private void update(){
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if(num>10){
                    timer.cancel();
                }else{
                    textView.setText(String.valueOf(num));
                    num++;
                }
            }
        };
        handler.post(runnable);
    }
}
 
 
심심해서 해봤는데 이런식으로 만들면 될거 같네요
 
 
 
 
sandring (840 포인트) 님이 2017년 2월 20일 답변
감사합니다. 안드로이드는 ui 쓰레드에서 while문을 쓰면 안되는 것 같더라고요
...