1
我有一个与LongPoll一起工作的服务,当我收到我的数据时,一切正常,但是当我没有收到数据,而是我收到空结果长时间轮询最大时间== 25秒)我的服务有时会手动关闭(我没有在服务列表中看到它)。Android服务在功能工作时间超过(约)15秒时关闭
那么,如何保持此服务(..always ..)运行?
递归函数,这与长轮询并在服务的onCreate()
(结构)首先调用工作:
//"u" is "new utils()".
public class myservice extends Service {
public static boolean started=false;
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, "created qweqwe", Toast.LENGTH_LONG).show();
longpoll();
this.started=true;
}
@Override
public void onDestroy() {
super.onDestroy();
this.started=false;
}
private String url = "http://example.com/lp.php";
private void longpoll() {
try {
String resp = u.getData(url); //max time of working u.getData(lpurl) - 25s.
if (resp.length()>0) doSmthWithData(resp); //It works fine
} catch(Exception e) {}
longpoll();
}
}
我已经更新了代码。如果(!myservice.started)它从主要活动开始。不是服务的后台线程? –
@anony_root:“服务不是后台线程吗?” - 不它不是。从用户界面的角度来看,服务是在后台。它们不在主应用程序线程的后台。 'onStartCommand()'和一个服务的所有其他生命周期方法在主应用程序线程上调用 - 这是为您的UI提供动力的相同主应用程序线程。而且,也适用相同的规则:每一毫秒你绑定该线程冻结用户界面,并且如果你在该线程上花费很长时间,你将被终止。 – CommonsWare
最后一件事:我可以从后台线程创建通知吗? –