BroadcastReceiver는 시스템이나 애플리케이션 내에서 발생한 이벤트에 대한 알림을 수신하는 데 사용됩니다. 이를 활용하여 백그라운드 스레드에서 발송한 브로드캐스트 메시지를 메인 스레드에서 수신하여 처리할 수 있습니다.
1. 브로드캐스트 수신자 클래스 작성:
javaCopy code
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyResultReceiver extends BroadcastReceiver {
public static final String ACTION_RESULT = "com.example.YOUR_APP_NAME.ACTION_RESULT";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(ACTION_RESULT)) {
// 메인 스레드에서 처리할 작업
// UI 업데이트 등
// ...
}
}
}
2. 백그라운드 스레드에서 브로드캐스트 메시지 발송:
javaCopy code
import android.content.Intent;
public class YourBackgroundThread extends Thread {
@Override
public void run() {
// 백그라운드 스레드에서 수행할 작업
// ...
// 작업이 완료되면 브로드캐스트 메시지를 발송
Intent intent = new Intent(MyResultReceiver.ACTION_RESULT);
// 다른 데이터를 넣고 싶다면 putExtra를 이용
// intent.putExtra("key", value);
context.sendBroadcast(intent);
}
}
3. 메인 액티비티에서 브로드캐스트 리시버 등록:
javaCopy code
import android.content.IntentFilter;
public class MainActivity extends AppCompatActivity {
private MyResultReceiver resultReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 브로드캐스트 리시버 등록
resultReceiver = new MyResultReceiver();
IntentFilter filter = new IntentFilter(MyResultReceiver.ACTION_RESULT);
registerReceiver(resultReceiver, filter);
}
@Override
protected void onDestroy() {
// 액티비티가 종료될 때 브로드캐스트 리시버 등록 해제
unregisterReceiver(resultReceiver);
super.onDestroy();
}
}
위의 코드는 백그라운드 스레드에서 MyResultReceiver.ACTION_RESULT 액션으로 브로드캐스트 메시지를 발송하면, 메인 스레드에서는 이를 수신하여 작업을 처리합니다.