安卓后台服务在一段时间后停止
我创建了一个后台服务,它定期打到我的服务器,但不幸的是,后台服务在一段时间后停止。安卓后台服务在一段时间后停止
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);
}
}
只有在代码的任何位置调用startService时,onStartCommand才会自动撤销。因此仅在Manifest中声明服务是不够的。
所以,通过调用
startService(new Intent(context, serviceName.class));
按照上面的代码onStartCommand方法将定期撤销如果服务没有停止运行的服务。
有关您的信息,请从近期关闭服务中删除应用程序。并且
@Override
public void onTaskRemoved(Intent rootIntent) {
}
方法正在被调用。
如果您手动启动服务,即使正在关闭,它也会自动重新启动。
我已经使用此方法,但仍然不适合我。服务在一段时间后仍然停止 –
这可能对你有帮助-https://stackoverflow.com/a/44898088/4310861 – Exigente05
定义广播接收器在这篇文章中调用您的服务。
我已经使用这种方法,但仍然不适合我。服务一段时间后仍然停止 –
使用作业程序器做你经常性的工作或前景的服务 – nomag
我不想前台服务,我想后台服务,我发信息给服务器上定期,但1-2小时后我的应用服务停止。请给我的解决方案,以便我的服务没有停止通过android操作系统 –