開始後に結果を返す必要があるAndroidサービスがあります。そう:
1) サービスを開始します
2) サービスが何かをする
3) サービスが結果を返す
シングルトンクラスを使用して結果を取得できるのではないかと考えました。サービスに結果を保存させ、アクティビティによってサービスから結果を取得するために、シングルトン クラスを作成しました。クラスのコードは次のとおりです。
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
、決して呼び出されないことです。なんで?それは私のアプローチが間違っていますか?