내 안드로이드 앱이 서버와 통신해야합니다. 따라서 액티비티는 인 텐트를 생성하고 IntentService 파생 상품을 시작합니다.Android : ResultReceiver 참조가 사라지는 이유는 무엇입니까?
this one과 같은 힌트 다음에 나는 응답을 처리하기 위해 ResultReceiver를 확장했습니다. 내 액티비티는 포함 된 Receiver 인터페이스를 구현하므로 (onReceiveResult를 구현합니다).
public class MyResultDistributor extends ResultReceiver {
// Class instances serves one purpose: To remember who gets the answer.
private Receiver mReceiver;
// Constructor: Apparently, the "handler" determines in which thread the result handling is done.
public MytResultDistributor(Handler handler) {
super(handler);
}
// This is what the receiver of request answers has to implement.
public interface Receiver {
public void onReceiveResult(int resultCode, Bundle resultData);
}
// Allows to clarify who is the receiver of request results.
public void setReceiver(Receiver receiver) {
if (receiver != null) {
Log.d(this.getClass().toString(), "Setting receiver.");
} else {
Log.d(this.getClass().toString(), "Unsetting receiver.");
}
this.mReceiver = receiver;
if (this.mReceiver != null) {
Log.d(this.getClass().toString(), "Set receiver.");
} else {
Log.d(this.getClass().toString(), "Unset receiver.");
}
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
// Anybody interested in the results? Well, then feel free to take them.
Log.d(this.getClass().toString(), "Got result.");
if (this.mReceiver != null) {
Log.d(this.getClass().toString(), "Distributing result.");
this.mReceiver.onReceiveResult(resultCode, resultData);
} else {
Log.d(this.getClass().toString(), "No receiver there.");
}
}
활동이의 인스턴스를 생성하고, 수신기 (발췌)로 자신을 설정합니다
public class MainActivity extends Activity implements MyResultDistributor.Receiver {
public MyResultDistributor mDistributor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(this.getClass().toString(), "onCreate");
setContentView(R.layout.activity_main);
mDistributor = new MyResultDistributor(new Handler());
mDistributor.setReceiver(this);
(...)
}
@Override
protected void onPause() {
super.onPause();
Log.v(this.getClass().toString(), "onPause");
mDistributor.setReceiver(null);
}
@Override
protected void onResume() {
super.onResume();
Log.v(this.getClass().toString(), "onResume");
mDistributor.setReceiver(this);
}
(...)
을 지금, 나는이 작업을 실행할 때, 내 서비스를 시작하고, 그 결과를 반환을 mReceiver
이 null 인 것 같습니다. 하지만 로그에서 null로 설정되는 것을 볼 수는 없습니다. "
로그 발췌 : 지난 5 메시지가 다른 TID 기능
onCreate
Setting receiver.
Set receiver.
onResume
Setting receiver.
Set receiver.
Request Service was created.
Request Service has got an Intent.
Server answer: auth
Authenticated!
Got result.
No receiver there.
.
수신자가 한 가지 방법으로 설정되어 나타나고 다른 하나에서 설정이 해제되는 이유는 무엇입니까? 스레드 문제가 있습니까? new Handler()
을 사용하여 문제가 생겼을 수 있습니까?
어떤 힌트를 부탁드립니다.