2016-09-14 3 views
1

아래 스 니펫은 활동이 포 그라운드에있을 때 작동합니다. 그러나 MainActivity가 백그라운드에있을 때 MainActivity는 브로드 캐스트를 수신하지 못합니다.IntentService에서 일시 중지 된 활동으로 데이터를 보내는 방법은 무엇입니까?

MainActivity가 항상 브로드 캐스트를 수신하도록하려면 어떻게해야합니까? IntentService에서 일시 중지 된 활동으로 데이터를 전송하는 다른 방법이 있습니까? 내 IntentService에서

, 내 활동이

Intent intent = new Intent(); 
intent.setAction(MY_SERVICE_RESULT); 
intent.putExtra(MY_SERVICE_VALUE, "hello from service"); 
LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 

처럼 MainActivity에 다시 데이터를 전송하고있어, 내가 있는지 확인하려면 어떻게해야이

public class MainActivity extends AppCompatActivity{ 

    BroadcastReceiver receiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     String value = intent.getStringExtra(MY_SERVICE_VALUE); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(MY_SERVICE_RESULT); 
     LocalBroadcastManager.getInstance(this).registerReceiver(receiver, intentFilter); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
    } 
    } 
} 
+0

** BroadCastReceiver **를 사용하거나 ** Callback ** 일 수도 있습니다. –

+0

@RahulSharma, 저는 이미 BroadcastReceiver를 사용하고 있습니다. 콜백은 어떻게 사용합니까? 어떤예요? –

+0

을이 활동 클래스에 구현하고 서비스 클래스 생성자의 콜백 인스턴스를이 활동 클래스에서 전달하십시오. 그리고 서비스 클래스에서는이 콜백을 사용하여 구현 한이 액티비티로 데이터를 보냅니다. –

답변

0

같은 브로드 캐스트 리시버 사용하고 있습니다 MainActivity는 항상 방송을 수신합니까?

수 없습니다.

그러나 IntentService가 MainActivity에 임시로 보내는 데이터 (예 : SharedPreferences)를 저장하고 MainActivity가 onResume에서 해당 저장 용량을 확인하도록하면 문제를 해결할 수 있습니다.

가능한 시나리오
IntentService가 그 일을합니다. MainActivity가 활성 상태인지 확인합니다 *. 그것이 있다면 -> 브로드 캐스트를 보냅니다. 그렇지 않으면 -> 어딘가에 저장하고 MainActivity가 onResume에서 해당 저장소를 검사하도록합니다.

* 응용 프로그램의 lifecyclecallbacks를 사용하여 활동의 상태를 모니터링하여 활동이 실행 중인지 여부와 그 중 어떤 것이 있는지 확인할 수 있습니다.

관련 문제