Background Service에서 현재 Activity에 데이터 갱신 요청 방법

고오·2023년 4월 26일
0

Android

목록 보기
2/4
post-custom-banner

요즘 안드로이드 키오스크 관련해서 프로젝트를 진행해 오다보니 제약도 있어 보이지만
오히려 시스템 권한으로 할 수 있는 것들도 있어서 재미를 붙여가고 있다.

이번에는 액티비티 화면은 foreground되어 있는데 데이터를 일정 주기로 가져오는 background 서비스에서 현재 액티비티에서 데이터만 갱신되도록 고민하고 있던 중에 찾은 방법이다.

안드로이드 개발자라면 사용법은 쉽다.
단지 사용해 볼 일이 없었다면 나처럼 늦게 접했을 것이란 차이는 분명 있어 보인다.

방법은 Broadcast Receiver를 사용한다.
근데 여지껏 내가 써온 Broadcast는 글로벌하게 다른 receiver에게도 보낼 수 있는 반면 이번에 사용한 방법은 LocalBroadcast방식이다.
말처럼 로컬하게 내 앱에서만 수신해서 사용한다는 것인데 정말 이편한 걸 이제야 알았는지...

Androidmanifest.xml에는 따로 등록할 필요는 없다.

Background Service에서 보내기

public static final String RECEIVER_SCHEDULE_CHANGED = "schedule_changed";

LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(new Intent(RECEIVER_SCHEDULE_CHANGED));

MainActivity에서 수신하기

private BroadcastReceiver scheduleChangeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            LogUtils.d("onReceive");
            //TODO: 데이터 처리
        }
    };
    
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    IntentFilter intentFilter = new IntentFilter(RECEIVER_SCHEDULE_CHANGED);
        LocalBroadcastManager.getInstance(this).registerReceiver(scheduleChangeReceiver, intentFilter);
}

...

@Override
protected void onDestroy() {
      super.onDestroy();
      LocalBroadcastManager.getInstance(this).unregisterReceiver(scheduleChangeReceiver);
}
profile
모바일 어플리케이션 개발자(Android, Flutter)
post-custom-banner

0개의 댓글