티스토리 뷰

반응형
public final class ActivityManagerService extends ActivityManagerNative {
	...
    static final int BROADCAST_FG_TIMEOUT = 10 * 1000;
    static final int BROADCAST_BG_TIMEOUT = 60 * 1000;
    ...
}

안드로이드 API 15 ICS 버전까지의 Broadcast Receiver의 시간제한

 

 

Broadcast Receiver도 Main Thread에서 처리되기 때문에 ANR이 존재한다.

 

정확한 Broadcast Receiver의 시간제한은 안드로이드 버전별로 차이가 있다.

 


Foreground vs Background (Broadcast)

 

 

Foreground Broadcast는 우선순위가 더 높지만 ANR에 걸리는 시간이 작다. 좀 더 사용자에게 영향을 끼칠 수 있기 때문이다. 우선순위를 높게주는 이유는 더 짧은 ANR에 걸리는 시간이 작기 때문에 빨리 처리해야하기 때문이다.

 

 

public void onClick(View v) {
	Intent intent = new Intent();
    intent.setAction("ch4njun_DOWNLOAD");
    intent.putExtra("FILE_NAME", "ch4njun.png");
    
    intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
    
    sendBroadcast(intent);
}
public void onReceive(Context context, Intent intent) {
	try {
    	Thread.sleep(62000);
    }catch(InterruptedException e) {
    	// ...
    }
}

위와 같이 Forground Broadcast를 보냈고, 수신측에서 62초동안 sleep하기 때문에 ANR이 발생한다.

 

Intent.FLAG_RECEIVER_FOREGROUND 를 주지 않으면 기본적으로 Background Broadcast가 보내진다. 

 

 

Receiver도 Activity와 같은 Main Thread를 사용하기 때문에 Receiver에서 오래걸리는 작업을 수행할 경우 Activity에도 영향을 미치게 된다. 따라서 짧은 시간에 동작이 완료되는 동작을 Receiver에서 수행하는 것이 좋다.

따라서 긴 시간이 걸리는 작업을 처리하려면 Worker Thread를 생성해 동작시키거나, Service Component를 사용해 동작시켜야 한다.

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함