-1
我的android應用必須與服務器通信。一個活動因此創建一個意圖並啓動一個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
爲空。但我看不到它在日誌中設置爲空的位置!
日誌摘錄:
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.
,其中最後5個消息設有不同的TID。
爲什麼接收器出現在一個方法中設置和另一個未設置?我有線程問題嗎?可能通過使用new Handler()
做錯了嗎?
謝謝你的提示!