안드로이드

 

 

 

(AsyncTask를 활용한 비동기작업 처리) - ajax 처럼  화면 전환 순차적으로 처리 가능

 

class AsyncActivity

 

package com.example.choi.ex_06;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class AsyncActivity extends AppCompatActivity {

    //1.변수 선언
    ListView list;
    String[] items={"사과", "포도", "바나나", "귤","체리","호두"};
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.async);
        //2.객체 생성

        list=(ListView)findViewById(R.id.list);
        //3.아답터 생성(데이터 변환기)
        //데이터를 집합뷰로 변환
        //처음에 데이터를 비워 놓는다. new ArrayList()
        adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, new ArrayList());

        list.setAdapter(adapter);
        //4.비동기 작업 실행
        StringTask task =new StringTask();
        task.execute();

    }

    //내부클래스
    //AsyncTask: 비동기 작업을 지원하는 클래스
    //AsyncTask<Params, Progress, Result>
    //AsyncTask<파라미터 자료형, 프로그레스 자료형, 결과 자료형>
    class StringTask extends AsyncTask<Void, String , Void>{
        //백그라운드에서 처리되는 코드

        //1 Void 첫번째 자료형
        @Override
        protected Void doInBackground(Void... params) {
            for(String item :items){
                //item값이 onProgressUpdate로 전달됨
                publishProgress(item);
                //Thread.sleep과 동일한 코드
                SystemClock.sleep(1000);
            }
            return null;
        }

        //화면 UI 를 변경하는 코드
        //2. String 두번째 자료형
        //자료형... 변수 => 가변사이즈 매개변수(배열로 처리됨)
        @Override
        protected void onProgressUpdate(String... values) {
            adapter.add(values[0]);//아답터에 데이터를 추가

        }

        //비동기 작업이 완료되었을때 처리할 코드
        //3.Void 세번째 자료형
        @Override
        protected void onPostExecute(Void aVoid) {
            Toast.makeText(AsyncActivity.this, "완료되었습니다.", Toast.LENGTH_SHORT).show();
        }



    }

}









 

 

async.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/async"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.choi.ex_06.AsyncActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/list"
        android:layout_alignParentTop="true" />
</RelativeLayout>

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

악한 사람이 선한 사람을 꾸짖거든 선한 사람은 전혀 상대하지 말라. 상대하지 않는 사람은 마음이 맑고 한가하지만, 꾸짖는 자는 입이 뜨겁게 끓는 것과 같다. 마치 사람이 하늘을 향해 침뱉으면 도로 자기 몸에 떨어지는 것과 같다. -명심보감

댓글 ( 4)

댓글 남기기

작성