2015-08-04 4 views
1

В настоящее время я создал службу для httpRequest для моего php-сервера каждые 15 секунд. Код работает хорошо, но проблема в том, что когда я закрываю приложение, httpRequest перестает работать и больше не отправляет данные. что я хочу сделать, когда я закрываю приложение, httpRequest все еще работает. что я должен изменить в своем коде?Как продолжить выполнение задачи, даже если приложение уже закрыто?

вот код я работаю над ...

public class NotificationService extends Service { 

public String response; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(this, "on start command", Toast.LENGTH_SHORT).show(); 
    new MyAsyncTask().execute("muhammad sappe"); 
    return START_NOT_STICKY; 
} 

private class MyAsyncTask extends AsyncTask<String, String, String>{ 

    @Override 
    protected String doInBackground(String... params) { 
    // TODO Auto-generated method stub 
    postData(params[0]); 
    return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       new MyAsyncTask().execute("muhammad sappe"); 
      } 
     }, 15000); 
    super.onPostExecute(result); 
    } 

} 

public void postData(String MyName){ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://mydomain/getData.php"); 
    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("action", MyName)); 

     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     // Execute HTTP Post Request 
     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
     response = httpclient.execute(httppost, responseHandler); 
    }catch(ClientProtocolException e){ 
     // TODO Auto-generated catch block 
    }catch(IOException e) { 
     // TODO Auto-generated catch block 
    } 
} 

public void onDestroy() { 
    super.onDestroy(); 
} 
} 

ответ

2

Как Mariana Itani сказал, что вам нужно использовать Foreground Service. Это неверно! Вам не нужно использовать Foreground Service. Все, что вам нужно сделать, это изменить возвращаемое значение,

От:

return START_NOT_STICKY; 

To:

return START_STICKY; 

Foreground Service используется, когда вам нужно, чтобы показать уведомление, что приложение делает некоторые задачи в фоновом режиме. Например, приложения для музыкального проигрывателя.

+0

моя ошибка: D i miss понял о START_STICKY и START_NOT_STICKY .... .. спасибо alot bro (y) .. вы спасли мое время –

2

Вы должны использовать приоритетную услугу.

У служб на переднем плане должно быть уведомление, чтобы уведомить пользователя о том, что служба работает, даже если приложение закрыто.

Вот пример:

public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    if(intent!=null) { 
     if(intent.hasExtra("id")) { 
      url = intent.getStringExtra("id"); 
      int id = 1; 
      // Issues the notification 
      n = new NotificationCompat.Builder(this).setContentTitle("Workee") 
        .setContentText("Deleting Image") 
        .setProgress(0, 0, true) 
        .setAutoCancel(false) 
        .setSmallIcon(R.drawable.workee_logo).build(); 
      startForeground(id, n); 
      // start thr asnyc task 
      deletePhoto(); 
      return START_STICKY; 
     } 
    } 
+1

Это не то, что я ищу, но спасибо за указание на это, это дает мне представление, что это должно быть использовано в моем приложении :) –