Regarding the code from the answer to this question Restful API service I've tested it and it works. I've condensed it a little for the purpose of my question, which is to understand how the member variable mReceiver in class MyResultReceiver survives the Parcel write process:
intent.putExtra("receiver", mReceiver);
and the read process:
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
When the send method is called on the receiver, since there is no code that I can see that Parcels the mReceiver member variable, I expect mReceiver to be null but it is not, why?
Full code example:
public class HomeActivity extends Activity implements MyResultReceiver.IReceiver {
public MyResultReceiver mReceiver;
public void onCreate(Bundle savedInstanceState) {
mReceiver = new MyResultReceiver(new Handler());
mReceiver.setReceiver(this);
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, QueryService.class);
intent.putExtra("receiver", mReceiver);
intent.putExtra("command", "query");
startService(intent);
}
}
public class QueryService extends IntentService {
protected void onHandleIntent(Intent intent) {
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
receiver.send(0, Bundle.EMPTY);
}
}
public MyResultReceiver extends ResultReceiver {
private IReceiver mReceiver;
public MyResultReceiver(Handler handler) {
super(handler);
}
public void setReceiver(Receiver receiver) {
mReceiver = receiver;
}
public interface IReceiver {
public void onReceiveResult(int resultCode, Bundle resultData);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (mReceiver != null) {
mReceiver.onReceiveResult(resultCode, resultData);
}
}
}