服务一次又一次地被破坏

时间:2015-02-01 17:17:00

标签: android android-service

我创建了一个扩展服务的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();

     }

 }

1 个答案:

答案 0 :(得分:0)

  

服务在一段时间后被销毁,并且一次又一次地调用它的oncreate方法

这是服务的完全正常行为。 An Android SDK app process does not live forever。它将被终止以释放其他进程的内存。通过返回START_STICKY,您要求Android在此后的一段时间内重新启动您的流程。