본문 바로가기

안드로이드

Activity Service 컴포넌트간에 데이터 교환

Service Component

public class MainActivity extends AppCompatActivity {

private SubService mService;
private boolean mBound;
Button getCountValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getCountValue = findViewById(R.id.getCountValue);

getCountValue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mBound){
Toast.makeText(mService, "값 : "+mService.getValue(), Toast.LENGTH_SHORT).show();
}
}
});
}

@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(this,SubService.class);
bindService(intent, mConnection, BIND_AUTO_CREATE);
}

@Override
protected void onStop() {
super.onStop();
if (mBound){
unbindService(mConnection);
mBound = false;
}
}

private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {      //서비스가 연결됬을때 서비스의 IBinder가 넘어온다
SubService.MyBinder binder = (SubService.MyBinder) service;
mService = binder.getService();
mBound = true;
}

@Override
public void onServiceDisconnected(ComponentName name) {
//예기치 않은 종료시 실행되는 코드
}
};

}

Service Component


public class SubService extends Service {

private String value = "값이다.";

private IBinder mBinder = new MyBinder();
public class MyBinder extends Binder{
public SubService getService(){
return SubService.this;
}
}

public SubService() {
}

@Override
public IBinder onBind(Intent intent) { //IBinder란?
return mBinder;
}

public String getValue(){
return value;
}
}

getCountValue는 Button 이고 activity_main에 Button을 생성한후 id로 getCountValue로 지정하면된다.