android

Broadcast to Stopped process

toyship 2013. 5. 18. 08:16
반응형

아래내용은 다음의 url에서 가져온 내용입니다.

정리가 잘되어 있어서 그대로 올립니다.  

많이들 참고 하시길...

http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-ICS-%EB%B6%80%ED%84%B0-Broadcast-%EC%8B%9C-%EC%A3%BC%EC%9D%98%ED%95%B4%EC%95%BC-%ED%95%A0-%EC%A0%90-Stopped-Process


안드로이드/Android ICS 부터 Broadcast 시 주의해야 할 점. ( Stopped Process.. )안드로이드/Android ICS 부터 Broadcast 시 주의해야 할 점. ( Stopped Process.. )

POSTED AT 2012/06/12 23:48 | POSTED IN ANDROID/BROADCASTRECEIVER

안드로이드/Android ICS 부터 Broadcast 시 주의해야 할 점. ( Stopped Process.. )




Android 3.1 부터 system 의 package manager 는 application 의 stop 상태를 유지관리하며, background process 나 다른 app 에서 launch 할 수 있는 것을 control 합니다. Activity 의 stopped state 와 application 의 stopped state 는 다릅니다. platform 에서는 2개의 새로운 intent 를 제공해서 stopped application component 관련한 launch 를 control 할 수 있습니다. 
 

FLAG_INCLUDE_STOPPED_PACKAGES  : stopped 된 application 도 target 이 됩니다. 
FLAG_EXCLUDE_STOPPED_PACKAGES : stopped 된 application 은 target 이 되지 않습니다.
 

이 intent flag 가 아무것도 설정되지 않는다면 기본값은 FLAG_INCLUDE_STOPPED_PACKAGES 입니다. 
 
주의할 것은 system 이 broadcast intent 에 대해서는 기본값으로 FLAG_EXCLUDE_STOPPED_PACKAGES 를 더합니다. 이렇게 함으로서 background service 가 stopped application 을 쓸데 없이 launch 하는 것을 막아줍니다.
 
어플리케이션은 설치된 후 한번도 실행되지 않거나, Manage Application 등을 통해 강제종료되었을 경우 stopped state 입니다.




 





기존에 BroadCastReceiver를 사용할 경우에는, 현재 실행되고 있는 APP 이나 중지되어 있는 APP 이나 모두 intent action의 타겟이 되면 실행 하게 되었는데요. 3.1 이상의 버전 부터는 실행 APP 과 중지 APP 을 나누어서 관리 하게 된다는 의미 입니다.


그렇기 때문에 3.1이상 버전에도 기존처럼 intent를 사용하고 싶으시면, "FLAG_INCLUDE_STOPPED_PACKAGES" 플래그를 사용해 주시면 됩니다. 만약 중지되어 있는 APP의 BraodCastReceiver가 intent를 받고 싶지 않다면, Receiver를 호출하는 intent에 "FLAG_EXCLUDE_STOPPED_PACKAGES" 플래그를 추가해 주시면 됩니다.


사용방법을 보자면, 3.1 이상 버전에서는 

 
 Intent.FLAG_INCLUDE_STOPPED_PACKAGES
 Intent.FLAG_EXCLUDE_STOPPED_PACKAGES

를 추가해서 사용하시면 되구요,


3.1 아래 버전에서는

 
 public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32;
 public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16;

플래그를 지원하지 않으므로, final int 상수를 만들어서 사용 하시면 되겠습니다. 재가 사용을 해본 결과 플래그를 강제로 추가해서 3.1 아래 버전에서는 죽지 않고, 3.1 이상 버전에서는 동작하게 되네요. 그래도 혹시 모르니 3.1 이상 버전 부터 적용 되도록 하시면 좋습니다.



사용 방법 입니다.

1
2
3
4
5
6
intent = new Intent("arabiannight.tistroy.com.flag");
if(CommonUtil.higherVersion3dot1() == true){
     intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
}
 
sendBroadcast(intent); 


3.1 이상 버전 체크 하는 메서드 입니다.
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
32
33
34
35
36
37
38
/**
     * 현재 버전 반환
     * 3.1 이상 버전 체크
     */
    public static boolean higherVersion3dot1(){ 
        String version = Build.VERSION.RELEASE;
        Log.d("VERSION", "before version = " + version);
        Log.d("VERSION", "before version length = " + version.length());
        // ex 3.0.1 5자리 버전일 경우
        if(version != null && version.length() >= 5){
            Log.d("VERSION", "version length = " + version.length());
            version = version.substring(0, 3);
            Log.d("VERSION", "version = " + version);
            float fversion = Float.parseFloat(version);
            Log.d("VERSION", "float version = " + fversion);
             
            if(fversion >= 3.1f){
                return true;
            }else{
                return false;
            }
        }else{
            // ex 3.1 3자리 버전일 경우
            if(version != null && version.length() >= 3){
                version = version.substring(0, version.length());
                float fversion = Float.parseFloat(version);
                Log.d("VERSION", "else float version = " + fversion);
                 
                if(fversion >= 3.1f){
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }
    }


이런 식으로 사용 하시면 됩니다.^^



반응형

'android' 카테고리의 다른 글

Eclipse에서 jni header 만들기.  (0) 2013.07.11
illegal character: 65279  (0) 2013.06.12
나를 호출한 activity로 돌아가기.  (0) 2013.03.28
NDK compile definition   (0) 2013.01.31
버튼 넓이 동일하게 설정하기.  (0) 2013.01.29