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