반응형

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();
    }
}
반응형