У меня есть Service
, который использует Handler
и Thread
для запуска некоторого кода каждые 5 секунд. Когда я звоню stopSelf()
, служба кажется остановленной, потому что в разделе «Настройки устройства» -> «Приложения» -> «Выполняется» она там не отображается. Но код внутри потока продолжает работать каждые 5 секунд, хотя я остановил службу.
Почему Handler
и Thread
живы, даже когда служба остановлена? Как остановить Handler
и Thread
, когда служба остановлена.
final Handler h = new Handler();
final int delay = 5000; // milliseconds
h.postDelayed(new Runnable() {
public void run() {
// do something
final SharedPreferences sharedPref = getSharedPreferences(
getString(R.string.prefs), Context.MODE_PRIVATE);
if (sharedPref != null) {
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE
Log.d("UPDATING"," something here");
isUpdated = updateToServer(data);
if(isUpdated) {
sharedPref.edit().putBoolean("updated",true).commit();
stopSelf();
}
}
}).start();
}
h.postDelayed(this, delay);
}
}, delay);