Android:IntentService:如何:将回调从活动传递到IntentService?
我想将回调传递给IntentService。以下是我目前的代码: 我的回调接口Android:IntentService:如何:将回调从活动传递到IntentService?,android,callback,Android,Callback,我想将回调传递给IntentService。以下是我目前的代码: 我的回调接口 import android.os.Message; public interface SampleCallback { public void doSomethingFromCurrentThread(); public void doSomethingFromUIThread(final Message msg); } 我的意向服务 import android.app.IntentSer
import android.os.Message;
public interface SampleCallback {
public void doSomethingFromCurrentThread();
public void doSomethingFromUIThread(final Message msg);
}
我的意向服务
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();
}
}
}
非常感谢您提供有关如何通过我的回调的任何指导。以下是一个关于从服务通知活动的好答案:。对我来说,
Activity.createPendingreult()
是调用父活动的好方法
这实际上不是一个回调,但是如果没有绑定服务,那么没有好的方法来实现这样的回调。您可能正在寻找一个回调。它实现了Parcelable,因此您可以将其传递给intent服务
很抱歉4年后给了你一个答案。我看到了这个链接=>但没有明确的答案。为此,我首先提供了源代码,接下来的问题是如何调用pause()和resume()。我将为此发布另一个问题。RegardsHow我可以用绑定服务实现它吗?网上有没有实例?如果是的话,你能分享这个网址吗。。问候…哦,我忘了添加我刚才说的链接。修复了。我建议不要使用绑定服务。如果你告诉我你想做什么,我会尝试给你一个链接或代码示例。我为延迟回复道歉。我正在评估一个名为Skyhook的位置API,它具有回调接口。调用getLocation(auth,_Callback)时将使用回调方法。如果成功,将调用_callback.handleSuccess(location)。如果失败,_callback.handleError(位置)。然后,希望在服务内重复调用getLocation。我以前在Web应用程序中尝试过Java,但在阅读Android文档后,我意识到这是一种完全不同的方法,尽管它使用Java作为编程语言。这是一个很好的教程:但是,在执行此操作时要小心,因为您可能会意外泄漏视图。更多信息,请查看此文档,尝试使用活动的弱引用来帮助防止泄漏。