What happen when my Activity is destroyed when I'm using IntentService with ResultReceiver
Use a BroadcastReceiver on your Activity and register/unregister it in onResume()
and onPause()
respectively. You can use an IntentFilter
to listen for an Intent
from your IntentService
.
In your IntentService
, create an Action value for the IntentFilter
and send a broadcast with that Action when you want to update:
public static final String ACTION = "com.example.yourapp.action.ACTION_TAG";private void handleResult() { if (BuildConfig.DEBUG) { Log.v(TAG, "handleResult"); } // Broadcast result Intent intent = new Intent(ACTION); intent.putExtra("your_extra", someValue); LocalBroadcastManager.getInstance(this).sendBroadcast(intent);}
In your Activity
:
private BroadcastReceiver mYourReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (BuildConfig.DEBUG) { Log.v(TAG, "onReceive"); } Bundle bundle = intent.getExtras(); if (bundle != null) { // Update with content from bundle } } }; @Override public void onResume() { super.onResume(); if (BuildConfig.DEBUG) { Log.v(TAG, "onResume"); } // Register broadcast receiver LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourReceiver, new IntentFilter(YourIntentService.ACTION)); } @Override public void onPause() { super.onPause(); if (BuildConfig.DEBUG) { Log.v(TAG, "onPause"); } // Unregister broadcast receiver LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourReceiver); }