我打開一個新問題更清楚:) 我有android服務,我需要返回一個結果後,它已經開始。 所以: 1)我開始服務 2)服務做些什麼 3)服務返回結果 我想也許我可以使用單例類來取得結果。因此,我創建了一個單例類,以便使服務將結果保存在其中,並從活動的服務中獲取結果。這裏有類的代碼:Android:從服務中獲取結果
public class Result {
//SIGLETON DECLARATION
private static Result mInstance = null;
public static Result getInstance() {
if (mInstance == null) {
mInstance = new Result();
}
return mInstance;
}
private Result() {
}
//CODE
Object result;
boolean resultIsSet = false;
public void deletePreviousResult() {
this.result = null;
resultIsSet = false;
}
public void setResult(Object result) {
Log.w("result", "setResult");
this.result = result;
resultIsSet = true;
}
public Object getResult() {
Log.w("result", "getResult");
while(resultIsSet == false) {}
return this.result;
}
而這裏就是我用得到的結果代碼:
public int getInfo() {
Result.getInstance().deletePreviousResult();
//start the service and ask to save the result in singleton class
Intent myIntent = new Intent(mInstanceContext, MediaPlayerService.class);
myIntent.setAction("getInfo");
mInstanceContext.startService(myIntent);
//take the result
return (Integer) Result.getInstance().getResult();
}
什麼onStartCommand正在做的是
Result.getInstance().setResult(mMediaPlayer.getCurrentPosition());
其中mMediaPlayer是一個MediaPlayer對象。
但問題是,如果setResult應該在onStartCommand中調用,它永遠不會被調用!爲什麼?我的方法錯了嗎? 提前謝謝!
你可以分享onStartCommand的代碼嗎? – sandyiscool
當然,它所做的是: Result.getInstance()。setResult(mMediaPlayer.getCurrentPosition()); 其中mMediaPlayer是一個MediaPlayer對象;) – user1315621
只是爲了進行交叉檢查,您是否在manifest中聲明瞭該服務?您的服務擴展了哪些基類Service或IntentService或其他? – vikas