Android BroadcastReceiver 방송 등록 방식 요약

Android:BroadcastReceiver 등록 방식 은 두 가지 로 나 뉜 다.
정적 등록
동적 등록
1.정적 등록
AndroidManifest.xml 에서 태그 로 설명 합 니 다.
속성 설명:

<receiver 
  android:enabled=["true" | "false"]
// broadcastReceiver      App      
//     receiver   intent-filter   :   intent-filter,    true,   false
  android:exported=["true" | "false"]
  android:icon="drawable resource"
  android:label="string resource"
//  BroadcastReceiver     
  android:name=".mBroadcastReceiver"
//                     BroadcastReceiver   ;
  android:permission="string"
//BroadcastReceiver       
//   app   ,         
// :Android                       
  android:process="string" >

//                  
//                        
 <intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>
등록 예시

<receiver 
  //        mBroadcastReceiver
  android:name=".mBroadcastReceiver" >
  //                
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>
이 앱 이 처음 시 작 될 때 시스템 은 자동 으로 mBroadcastReceiver 클래스 를 실례 화하 고 시스템 에 등 록 됩 니 다.
2.동적 등록
코드 에서 Context 의 registerReceiver()방법 을 호출 하여 BroadcastReceiver 를 동적 으로 등록 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

@Override
 protected void onResume(){
   super.onResume();

  //   BroadcastReceiver   & IntentFilter
   mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
   IntentFilter intentFilter = new IntentFilter();

  //         
   intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);

  //  Context registerReceiver()        
   registerReceiver(mBroadcastReceiver, intentFilter);
 }


//     ,            
//  onPause()  unregisterReceiver(mBroadcastReceiver)
//  Activity    ,    MyBroadcastReceiver      
//  Activity   ,     MyBroadcastReceiver           。
 @Override
 protected void onPause() {
   super.onPause();
   //   onResume()      
   unregisterReceiver(mBroadcastReceiver);
   }
}
3.두 가지 등록 방식 의 차이
注册方式的区别
4.각별히 주의
동적 방송 은 Activity 의 onResume()에 등록 하고 onPause()에서 로그아웃 하 는 것 이 좋다.
원인:
1.동적 방송 에 대해 등록 이 있 으 면 반드시 로그아웃 이 있어 야 한다.그렇지 않 으 면 메모리 가 유출 될 수 있다.
중복 등록,중복 로그아웃 도 허용 되 지 않 습 니 다.
2.Activity 수명 주 기 는 다음 과 같다.
Activity生命周期
Activity 라 이 프 사이클 의 방법 은 쌍 을 이 루어 나타 나 는 것 입 니 다.
- onCreate() & onDestory()
- onStart() & onStop()
- onResume() & onPause()
onResume()등록,onPause()로그아웃 은 onPause()가 앱 이 사망 하기 전에 반드시 실행 되 기 때문에 방송 이 앱 이 사망 하기 전에 반드시 로그아웃 되 어 메모리 유출 을 방지 할 수 있 습 니 다.
1.onCreate()&onDestory()또는 onStart()&onStop()에 등록 하지 않 고 로그아웃 하 는 것 은:
시스템 이 메모리 부족(우선 순위 가 높 은 응용 에 메모리 가 필요 합 니 다.위의 빨간색 상 자 를 보십시오)으로 인해 Activity 가 차지 하 는 자원 을 회수 하려 고 할 때 Activity 는 onPause()방법 을 실행 한 후에 삭 제 됩 니 다.일부 생명주기 방법 은 onStop()이 고 onDestory()는 실행 하지 않 습 니 다.이 Activity 로 다시 돌아 갈 때 는 onCreate 방법 부터 실 행 됩 니 다.2.만약 에 저희 가 라디오 의 로그아웃 을 onStop(),onDestory()방법 에 두 었 다 고 가정 하면 Activity 가 삭 제 된 후에 도 onStop(),onDestory()방법 을 실행 하지 않 았 을 수도 있 습 니 다.즉,방송 이 아직 로그아웃 되 지 않 아 메모리 가 유출 될 수도 있 습 니 다.3.그러나 onPause()는 반드시 실 행 될 것 이 고 방송 이 앱 이 사망 하기 전에 반드시 로그아웃 되 어 메모리 유출 을 방지 할 것 을 보장 한다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기