【发布时间】:2016-08-03 06:49:37
【问题描述】:
我有一个 IntentService 在另一个类中启动异步任务,然后应该等待结果。
问题是IntentService 会在onHandleIntent(...) 方法运行完毕后立即结束,对吧?
也就是说,正常情况下IntentService会在启动异步任务后立即关闭,不再在那里接收结果。
public class MyIntentService extends IntentService implements MyCallback {
public MyIntentService() {
super("MyIntentService");
}
@Override
protected final void onHandleIntent(Intent intent) {
MyOtherClass.runAsynchronousTask(this);
}
}
public interface MyCallback {
public void onReceiveResults(Object object);
}
public class MyOtherClass {
public void runAsynchronousTask(MyCallback callback) {
new Thread() {
public void run() {
// do some long-running work
callback.onReceiveResults(...);
}
}.start();
}
}
我怎样才能使上面的 sn-p 工作?我已经尝试在开始任务后将Thread.sleep(15000)(任意持续时间)放入onHandleIntent(...)。它似乎工作。
但这绝对不是一个干净的解决方案。甚至可能存在一些严重的问题。
有更好的解决方案吗?
【问题讨论】:
-
是什么阻止您制作同一事物的同步版本?
-
你可以使用 bindservice 。 developer.android.com/guide/components/bound-services.html 这对我有很大帮助。
-
@ianhanniballake:
MyOtherClass实际上是我不想更改的第三方组件的一部分。该类中的方法始终通过回调而不是同步传递其结果。 -
@mcd:绑定服务仅适用于
Service向另一个应用程序组件(通常是Activity)报告的用例,不是吗? -
是的,但是您可以使用服务类代替抱歉没有正确阅读您的问题
标签: java android asynchronous intentservice