Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Service не работает когда экран телефона выключен

#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. По-крайней мере, моя проблема заключалась в этом.

Комментариев нет:

Отправить комментарий