[안드로이드] 1초마다 UI 업데이트 하기

오늘 포스팅 목적은 매 초마다 UI를 업데이트를 시켜볼 것입니다.
우선 thread에서 UI 수정 방법은 4가지 종류가 있습니다.

- Hanlder
- runOnUiThread
- View.post
- View.postDlayed

오늘은 runOnUiThread를 이용하여 UI에 접근을 할 것 입니다.

중요한 코드는
Thread 생성 후 runOnUiThead를 이용하여 UI에 접근하는 방식입니다.


(new Thread(new Runnable()
        {
            @Override            
            public void run()
            {
                while (!Thread.interrupted())
                    try                   
                    {
                        Thread.sleep(1000); //1초 간격으로 실행
                        runOnUiThread(new Runnable()
                        {
                            @Override                            
                            public void run()
                            {
                                textView.setText(getCurrentTime());
                            }
                        });
                    }
                    catch (InterruptedException e)
                    {
                        // error    
                    }
            }
        })).start();


MainActivity.java


package com.uiupdate;

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

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    @Override    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textView = (TextView) findViewById(R.id.date);

        (new Thread(new Runnable()
        {

            @Override            
            public void run()
            {
                while (!Thread.interrupted())
                    try                    
                    {
                        Thread.sleep(1000);
                        runOnUiThread(new Runnable() // start actions in UI thread                                
                        {

                            @Override                            
                            public void run()
                            {
                                textView.setText(getCurrentTime());
                            }
                        });
                    }
                    catch (InterruptedException e)
                    {
                        // ooops       
                    }
            }
        })).start();
    }
    // 현재 시간을 반환
    public String getCurrentTime(){
        long time = System.currentTimeMillis();

        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

        String str = dayTime.format(new Date(time));

        return str;
    }
}

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    tools:context="com.uiupdate.MainActivity">

    <TextView        
        android:id="@+id/date"        
        android:layout_width="wrap_content"        
        android:layout_height="wrap_content"        
        app:layout_constraintBottom_toBottomOf="parent"        
        app:layout_constraintLeft_toLeftOf="parent"        
        app:layout_constraintRight_toRightOf="parent"        
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

실행 화면

시간이 계속 바뀌는 것을 확인할 수 있다.







참고 사이트
https://stackoverflow.com/questions/11687011/run-loop-every-second-java

댓글

  1. 덕분에 도움받았습니다 감사합니다!

    답글삭제
    답글
    1. 부족한 글에 댓글까지 달아주셔서 너무 감사합니다^^!

      삭제
  2. 익명1/09/2020

    도움 많이 되었습니다. 감사합니다

    답글삭제
    답글
    1. 소중한 댓글 덕분에 힘이 납니다!! 감사합니다~!!

      삭제

댓글 쓰기

이 블로그의 인기 게시물

[생활] 짝눈(부동시)로 신체검사 4급(공익) 받은 방법.

[스프링부트] @Mapper import 실패시(빨간줄) 해결 방법

[Spring] Spring & Egov *.do 확장자 없이 URL 접근 가능토록 하기