×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,583,131명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
728x90
반응형

Bundle이란?

 

Bundle은 여러가지의 타입의 값을 저장하는 Map 클래스이다.
예를 들면 string 값을 Bundle 클래스에 Mapping(대응, 변환)하는 것이다.
기본타입인 int, double, long, String 부터 FloatArray, StringArrayList, Serializable, Parcelable 까지 구현한다.

 

Serializable(객체 직렬화)는 객체를 바이트로 저장하는 자바의 인터페이스이고,

Parcelable는 안드로이드에서 만든 것이다.

클래스를 직렬화 하려면, 클래스에  implements Serializable 또는  implements Parcelable을 하여야 한다.


그런데 Android에서는 Activity간에 데이터를 주고 받을 때 Bundle 클래스를 사용하여 데이터를 전송한다.


http://developer.android.com/reference/android/os/Bundle.html
링크를 통해 API를 확인해보면 다양한 put, get 메소드를 확인 가능하다.

 

bundle의 다른 용도는 
아래와 같이 Activity를 생성할 때 아래와 같이 Bundle savedInstanceState 객체를 가지고 와서,

액티비티를 중단할 때 savedInstanceState 메서드를 호출하여 임시적으로 데이터를 저장한다.
즉 전에 저장된 데이터가 있으면, 그 데이터를 가지고 Activity를 다시 생성한다.

 

즉, Bundle은 아무거나 포장할 수 있는 상자를 의미하고 이 포장 박스를 이용하여 이리저리 인텐트도 오고갈 수 있고,

다양한 데이터 통신에 이용 할 수 있다.

 

Bundle 예제

 

MainActiviy

package com.example.testpage;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

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

        final Bundle bundle = new Bundle();
        bundle.putString("name", "croucs");
        bundle.putInt("age",2322);
        ArrayList<Integer> array = new ArrayList<>();
        array.add(1);
        array.add(2);
        array.add(3);
        array.add(4);
        bundle.putIntegerArrayList("array",array);

        Toast.makeText(getApplicationContext(),"zzz",Toast.LENGTH_LONG).show();
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), SubActivity.class);
                intent.putExtra("myBundle", bundle);
                startActivity(intent);
            }
        });
    }
}

 

SubActivity

package com.example.testpage;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class SubActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub_main);

        Intent intent = getIntent();
        Bundle bundle = intent.getBundleExtra("myBundle");
        Toast.makeText(getApplicationContext(), bundle.getIntegerArrayList("array").size()+"",Toast.LENGTH_LONG).show();
    }
}
반응형