#java #android
Как сделать android.app.Service так, чтобы даже при выключенном экране телефона он
работал? Вот его исходный код:
public class S extends Service {
@Override
public void onStart(Intent i1, int i2) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
//..........//
return;
}
}, 60000, 60000);
}
@Override
public IBinder onBind(Intent i1) {
return null;
}
}
Запускаю его так:
public class Main extends AppCompatActivity {
Intent i1;
@Override
protected void onCreate(Bundle i1) {
super.onCreate(i1);
setContentView(R.layout.layout_main);
this.i1 = new Intent(this, S.class);
startService(this.i1);
return;
}
@Override
protected void onDestroy() {
stopService(this.i1);
super.onDestroy();
return;
}
}
В теории сказано: «В отличие от Activity службы в Android работают как фоновые процессы...
Служба может продолжать работать до тех пор, пока кто-нибудь не остановит её или пока
она не остановит себя сама.». Но как только я отключаю экран телефона, служба перестаёт
работать. Она возобновляет свою работу только после того, как я разблокирую телефон.
Как исправить эту ошибку?
Ответы
Ответ 1
Это не ошибка, это так и должно, дабы телефон уходил в сон и не выжирал аккумулятор. Учитывая наличие таймера, может лучше использовать AlarmManager? Если же Вам действительно необходимо в таком виде, добавляете разрешение на android.permission.WAKE_LOCK и запрещаете засыпать: PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG"); wakeLock.acquire(); // нужный код wakeLock.release();Ответ 2
Для того, чтобы Service работал вне зависимости от экрана, необходимо его запускать не из под Activity, а, к примеру, из BroadcastReceiver. По-крайней мере, моя проблема заключалась в этом.
Комментариев нет:
Отправить комментарий