관리 메뉴

moozi

runOnUiThread 와 AsyncTask 비교 본문

안드로이드개발강좌

runOnUiThread 와 AsyncTask 비교

moozi 2017. 9. 25. 17:52
runOnUiThread 와 AsyncTask 비교

 

- Activity_Main.xml (공통)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.naver.thread01.MainActivity">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1번진행률"
       />
    <ProgressBar
        android:id="@+id/pb1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2번진행률"
        />
    <ProgressBar
        android:id="@+id/pb2"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="쓰레드 시작"/>

</LinearLayout>

 

- Thread1 : runOnUiThread

 

package com.naver.thread01;

import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    ProgressBar pb1, pb2;
    TextView tv1, tv2;
    Button btn;

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

        pb1=(ProgressBar)findViewById(R.id.pb1);
        pb2=(ProgressBar)findViewById(R.id.pb2);
        tv1=(TextView)findViewById(R.id.tv1);
        tv2=(TextView )findViewById(R.id.tv2);
        btn=(Button)findViewById(R.id.btn1);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(){
                    public void run(){
                        for(int i=0;i<100;i=i+2){
                            //Main스레드에서 UI를 변경하도록 요청
                            //UI변경작업은 runOnUiThread를 통해서 처리.
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    pb1.setProgress(pb1.getProgress()+2);
                                    tv1.setText("1번진행률:"+pb1.getProgress()+"%");
                                }
                            });
                            SystemClock.sleep(100);//0.1초 지연
                        }
                    }
                }.start();

                new Thread(){
                    public void run(){
                        for(int i=0;i<100;i++){
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    pb2.setProgress(pb2.getProgress()+1);
                                    tv2.setText("2번진행률:"+pb2.getProgress()+"%");
                                }
                            });

                            SystemClock.sleep(100);//0.1초 지연
                        }
                    }
                }.start();
            }
        });

    }
}

 


 

- Thread2 : AsyncTask

 

package com.naver.thread02;

import android.os.AsyncTask;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


    //Thread처리 Class
    class myAsyncTask extends AsyncTask<String, String, Void> {
        @Override
        protected Void doInBackground(String... strings) {
            //주작업은 여기에 코딩
            Log.d("=============","doInBackground()실행됨:");

            for(int i=0;i<=100;i++) {
                //onProgressUpdate호출
                publishProgress(Integer.toString(2*i), Integer.toString(i));
                SystemClock.sleep(100);//0.1초 지연
            }
            return null;
        }
        protected void onProgressUpdate(String... progress) {
            pb1.setProgress(Integer.parseInt(progress[0]));
            tv1.setText("1번진행률:"+pb1.getProgress()+"%");

            pb2.setProgress(Integer.parseInt(progress[1]));
            tv2.setText("2번진행률:"+pb2.getProgress()+"%");
        }


    }


    ProgressBar pb1, pb2;
    TextView tv1, tv2;
    Button btn;

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

        pb1=(ProgressBar)findViewById(R.id.pb1);
        pb2=(ProgressBar)findViewById(R.id.pb2);
        tv1=(TextView)findViewById(R.id.tv1);
        tv2=(TextView )findViewById(R.id.tv2);
        btn=(Button)findViewById(R.id.btn1);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                new myAsyncTask().execute();
            }
        });
    }

 

}

'안드로이드개발강좌' 카테고리의 다른 글

android xml 파싱  (0) 2017.09.27
BroadCast Action List  (0) 2017.09.27
custom listview  (0) 2017.09.22
안드로이드 그림판 예제  (0) 2017.09.20
EditText 입력시 소프트키보드 안나오게 하기  (0) 2017.09.13
Comments