(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>
댓글 ( 4)
댓글 남기기