2015-02-01 2 views
0

Я создал службу расширения класса 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; 
    } 

} 

Я попытался отладить это, и я думаю, что управление достигает здесь и отсюда происходит некоторая ошибка.

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

служба разрушается через некоторое время и снова его OnCreate метод называется

Это совершенно нормальное поведение для службы. An Android SDK app process does not live forever. Он будет прекращен, чтобы освободить память для других процессов. Вернувшись START_STICKY, вы просите Android перезагрузить процесс через некоторое время, после этого.

+0

О, я думал, что в моем коде была какая-то ошибка. Правильно ли это мой код? –

+0

И я выполняю задание на загрузку в своем классе обслуживания, не создаст проблем, если служба будет уничтожена в середине задачи загрузки? –

+0

@AryanArya: «Правильно ли мой код?» - Я понятия не имею, поскольку я понятия не имею, что вы пытаетесь сделать. Я могу сказать вам, что использование 'postDelayed()' и 'AsyncTask' в' Service' оба кода пахнет IMHO, а делать что-то один раз в минуту, скорее всего, будет враждебным пользователем. «не создаст проблем, если служба будет уничтожена в середине задачи загрузки» - ваша загрузка будет прервана, если Android завершит ваш процесс. – CommonsWare

Смежные вопросы