2017-10-04 7 views
1

일정한 간격으로 내 서버를 때리는 백그라운드 서비스를 만들었지 만 불행히도 얼마 후 백그라운드 서비스가 중지됩니다.일부 시간이 지나면 android 백그라운드 서비스가 중지됩니다.

public class LocationService extends Service{ 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    //TODO do something useful 

     new DownloadFilesTask().execute(""); 
     Toast.makeText(getApplicationContext(), "start", Toast.LENGTH_SHORT).show(); 

    return START_STICKY; 
} 


private class DownloadFilesTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... params) { 

    try { 
     URL url = new URL(siteurl); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     try { 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      StringBuilder stringBuilder = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       stringBuilder.append(line).append("\n"); 
      } 
      bufferedReader.close(); 
      return stringBuilder.toString(); 

     } 
     finally{ 
      urlConnection.disconnect(); 
     } 
    } 
    catch(Exception e) { 
     Log.e("ERROR", e.getMessage(), e); 
     return null; 
    } 

    } 

    @Override 
    protected void onPostExecute(String result) { 
    } 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
    } 
} 

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

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    Intent myIntent = new Intent(getApplicationContext(), LocationService.class); 

PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent, 0); 

AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 


alarmManager1.cancel(pendingIntent); 
Calendar calendar = Calendar.getInstance(); 

calendar.setTimeInMillis(System.currentTimeMillis()); 

calendar.add(Calendar.SECOND, 10); 

alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent); 

} 
@Override 
public void onTaskRemoved(Intent rootIntent) { 
    super.onTaskRemoved(rootIntent); 

    Intent myIntent = new Intent(getApplicationContext(), LocationService.class); 

PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent, 0); 

AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 


alarmManager1.cancel(pendingIntent); 
Calendar calendar = Calendar.getInstance(); 

calendar.setTimeInMillis(System.currentTimeMillis()); 

calendar.add(Calendar.SECOND, 10); 

alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent); 


} 

} 
+1

를 사용하여 작업 schedular 당신에게 내가 전경 서비스를 싶지 않는 일반 작업이나 전경 서비스 – nomag

+0

을 할, 내가 일정한 간격에 서버 나에게 정보를 보내 백그라운드 서비스를 원하지만 내 응용 프로그램 서비스를 1 ~ 2 시간 후 정지합니다. 제 서비스가 안드로이드 OS –

답변

0

최신 Android API 레벨 26 릴리스에는 백그라운드 서비스가 제한되어 있습니다. 참조하십시오 Background execution limits

+0

에 의해 멈추지 않도록 솔루션을주세요. 안드로이드 API 레벨 23도 –

0

onStartCommand는 코드의 어느 곳에서나 startService가 한 번만 호출되는 경우에만 자동으로 취소됩니다. 따라서 Manifest에서만 선언하는 서비스는 충분하지 않습니다.

그래서, 위의 코드 onStartCommand 방법 서비스가 중지되지 않은 경우 주기적으로 취소됩니다 다음

startService(new Intent(context, serviceName.class)); 

를 호출하여 서비스를 실행합니다.

귀하의 정보를 위해 최근 마감 된 서비스에서 앱을 삭제하십시오. 및

@Override 
public void onTaskRemoved(Intent rootIntent) { 

} 

메서드가 호출되고 있습니다.

수동으로 서비스를 시작하면 서비스가 종료 되어도 자동으로 다시 시작됩니다.

+0

이 방법을 사용하고 있지만 여전히 저에게는 효과가 없습니다. 서비스가 여전히 일정 시간이 지나면 계속 중지됩니다. –

+0

이것은 도움이 될 수 있습니다. -https : //stackoverflow.com/a/44898088/4310861 – Exigente05

0

귀하의 서비스를 호출하려면이 게시물에서와 같이 방송 수신기를 정의하십시오.

https://stackoverflow.com/a/9092324/4409623

+0

이 방법을 사용했지만 여전히 저를 위해 작동하지 않습니다. 일정 기간 후에도 서비스가 계속 중단됩니다. –