我创建了一个扩展服务的android类并实现了它的方法,但是服务在一段时间后被销毁,并且一次又一次地调用它的oncreate方法。
public class X extends Service {
String doTask;
String username;
ParseObject obj;
Handler h3;
ParseFile file;
Runnable r3 = new Runnable() {
@Override
public void run() {
if (ParseUser.getCurrentUser() != null) {
try {
YService yS = new YService();
yS.execute();
} catch (Exception e) {
}
}
h3.postDelayed(r3, 60000);
}
};
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (ParseUser.getCurrentUser() != null) {
try {
h3 = new Handler();
h3.postDelayed(r3, 60000);
} catch (Exception e) {
}
}
return START_STICKY;
}
private class yService extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("TODOTasks");
query.whereEqualTo("username", ParseUser.getCurrentUser()
.getUsername());
query.findInBackground(new FindCallback<ParseObject>() {
String task;
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
if (objects.size() == 0) {
}
if (objects.size() > 0) {
po = objects.get(0);
NewServiceCaller(obj.getString("task"));
}
} else {
}
}
});
return null;
}
}
我试图调试这个,我认为Control正在到达这里,并且从这里出现了一些错误。
private void commandexecuter(String commandtoexecute) {
if (commandtoexecute.equals("do some task")) {
try{
startService(new Intent(X.this,CalledService.class));
}
catch(Exception ex){
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onCreate() {
Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:0)
服务在一段时间后被销毁,并且一次又一次地调用它的oncreate方法
这是服务的完全正常行为。 An Android SDK app process does not live forever。它将被终止以释放其他进程的内存。通过返回START_STICKY
,您要求Android在此后的一段时间内重新启动您的流程。