Android: IntentService: Comment faire: passer de rappel en IntentService de l'Activité?
Je voudrais passer de rappel à IntentService. Voici mes codes:
Mon interface de rappel
import android.os.Message;
public interface SampleCallback {
public void doSomethingFromCurrentThread();
public void doSomethingFromUIThread(final Message msg);
}
Mon IntentService
import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class SampleCallbackIntentService extends IntentService {
private final String LOG_LOGCAT_TAG = "SampleCallbackIntentService";
private final SampleCallback _callback;
private Handler _handler;
public SampleCallbackIntentService(String name, SampleCallback callback) {
super(name);
_callback = callback;
}
@Override
public void onCreate() {
super.onCreate();
//initialize variables for pause & resume thread
_mPauseLock = new Object();
_mPaused = false;
_mFinished = false;
//initialize handler to switch to UI/Main thread
_handler = new Handler()
{
@Override
public void handleMessage(final Message msg)
{
_callback.doSomethingFromUIThread(msg);
}
};
}
private final int CALLBACK_MESSAGE = 1;
@Override
protected void onHandleIntent(Intent arg0) {
Log.i(LOG_LOGCAT_TAG, "loop started");
while (!_mFinished) {
//do stuff here
_callback.doSomethingFromCurrentThread();
//process and create the result to pass
String someResult = "some result here";
_handler.sendMessage(_handler.obtainMessage(CALLBACK_MESSAGE, someResult));
synchronized (_mPauseLock) {
while (_mPaused) {
try {
Log.i(LOG_LOGCAT_TAG, "loop paused");
_mPauseLock.wait();
Log.i(LOG_LOGCAT_TAG, "loop resumed");
} catch (InterruptedException e) {
Log.e(LOG_LOGCAT_TAG, "error occured on pause", e);
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Log.e(LOG_LOGCAT_TAG, "error occured on sleep", e);
}
}
Log.i(LOG_LOGCAT_TAG, "loop ended");
}
private Object _mPauseLock;
private boolean _mPaused;
private boolean _mFinished;
/**
* Call this on pause.
*/
public void pause() {
Log.i(LOG_LOGCAT_TAG, "pause() called");
synchronized (_mPauseLock) {
_mPaused = true;
}
}
/**
* Call this on resume.
*/
public void resume() {
Log.i(LOG_LOGCAT_TAG, "resume() called");
synchronized (_mPauseLock) {
_mPaused = false;
_mPauseLock.notifyAll();
}
}
}
Des conseils sur la façon de passer mon rappel est apprécié.
J'ai vu ce lien => stackoverflow.com/questions/3921269/..., mais n'ont pas de réponse claire. Pour cela, je donne mon code source pour commencer.
Mes prochaines questions sont sur la façon d'appeler pause() et resume(). Je vais poster une autre question. Ce qui concerne
Mes prochaines questions sont sur la façon d'appeler pause() et resume(). Je vais poster une autre question. Ce qui concerne
OriginalL'auteur eros | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
Vous pourriez être à la recherche d'un ResultReceiver. Il met en œuvre Parcelable de sorte que vous pouvez passer à l'intention du service.
Désolé pour vous donner une réponse 4 ans plus tard.
OriginalL'auteur midnightstar
Voici une bonne réponse sur notification d'une activité de service: Informer de l'activité de service. Quant à moi,
Activity.createPendingResult()
est une excellente façon d'appeler le parent de l'activité.Ce n'est pas réellement un rappel, mais autant que je sache, il n'y a pas de bonne façon de mettre en œuvre un tel rappel sans limite de service.
Oh, j'ai oublié d'ajouter un lien dont je parlais. Il fixe.
Et je vous recommande de ne pas utiliser les services liés. Si vous me dites ce que vous voulez faire, je vais essayer de vous donner un lien ou un exemple de code.
Mes excuses pour la réponse tardive. Je suis de l'évaluation d'un Emplacement API appelée Skyhook qui est d'avoir l'interface de rappel. Les méthodes de rappel sera utilisé lors de l'appel de getLocation(auth, _callback). Si réussir, _callback.handleSuccess(emplacement) sera appelée. En cas d'échec, _callback.handleError(emplacement). Alors, vous voulez appeler le getLocation à l'intérieur du Service à plusieurs reprises. J'ai essayé avant de Java dans les applications Web, mais à la lecture de l'Android à la documentation, j'ai réalisé que c'est totalement différente de l'approche tout en utilisant Java comme langage de programmation. Ce qui concerne.
Voici un bon tutoriel pour vous: mindtherobot.com/blog/37/...
OriginalL'auteur Michael