The action creates an instance of ResultReceiver and overrides onReceiveResult. The activity then sends the Intent to the IntentService and includes ResultReceiver as an extra. After the IntentService has completed processing, it sends the message back to the ResultReceiver and processes it in onReceiveResult.
The problem is that the user goes from Activity, then the result is still sent back to ResultReceiver, which causes all types of problems. There is no way to stop this behavior? I tried to stop the IntentService in onDestroy () activity, but the result was sent back anyway.
Here is an example of Activity
public class Foo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = new Intent(this, SampleIntentService.class); i.putExtra("receiver", mReceiver); startService(i); } @Override public void onDestroy() { stopService(new Intent(this, SampleIntentService.class)); mReceiver = null; super.onDestroy(); } ResultReceiver mReceiver = new ResultReceiver(new Handler()) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) {
Here is an example IntentService
public class SampleIntentService extends IntentService { public SampleIntentService() { super(SampleIntentService.class.getName()); } @Override protected void onHandleIntent(Intent intent) { ResultReceiver rec = intent.getParcelableExtra("receiver"); if (rec != null) { rec.send(200, null); } } }
source share