2012-01-20 5 views
0

내 활동에 사용하고있는 BroadcastReceiver에 문제가 있습니다. 실제로이 일을 해요 :Android BroadCastReceiver 지연 적용

onCreate()에서 :로 IntentFilter이 어디

@Override 
public void onResume(){ 
    super.onResume(); 
    MyCollectionList.this.registerReceiver(receiver, intentFilter); 
} 

@Override 
public void onPause(){ 
    super.onPause(); 
    MyCollectionList.this.unregisterReceiver(receiver); 
} 

:

IntentFilter intentFilter = new IntentFilter("finish"); 

 receiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals("finish")) { 
      // some code 
      }    
     } 
    }; 
    registerReceiver(receiver, intentFilter); 

하고 onResume()onPause() 내가이 일을 해요 내가이 broadc를 추가해야하는 6 가지 활동에서 이것을 할 때 ast 리시버 응용 프로그램이 느리게 시작되고 이전보다 느리게 시작됩니다.

내 상황에서 앱/또는 최선의 방법을 늦추지 않고 의도 필터를 보는 더 좋은 방법이 있습니다.

미리 감사드립니다.

답변

1
  • 방송 수신기를 onCreate에 등록하지 마십시오. onResume에 등록하고 onPause에서 등록을 취소하는 것은 안전하고 충분합니다.
  • 수신자 메소드에서 부하 처리를 수행해야합니다. 안드로이드는 그렇지 않으면, 지연을 피하기 활동의 컨텍스트와 수신기를 등록하는 새로운 작업자 스레드에서 처리를
+0

실제로는 탭을 따라 움직이기 시작한 경우에만 응용 프로그램이 지연됩니다. 왜냐하면이 수신기를 탭의 콘텐츠 인 모든 활동에 넣었 기 때문입니다. –

1

대신로드하려면

  • ANR로 선언합니다 수신기에 당신이 원하는 무엇을 적 수행하기 위해 10 초 창을 제공합니다 다음과 같이 첫 번째 활동에서 응용 프로그램의 컨텍스트에 등록하십시오.

    getApplication(). registerReceiver (receiver, intentFilter);

    활동이 '일시 중지'상태로 전환 된 경우에도 응용 프로그램이 백그라운드에서 계속 실행되므로 수신자는 활성 상태로 유지됩니다.

    희망이 도움이됩니다.

  • 관련 문제