IntentService не зависит от сна или дрему на эмуляторе - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу проверить эффекты отключения экрана и режима сна на IntentService.

Для этого я запускаю фон IntentService на Android Marshmallow, отключаю эмулируемое зарядное устройство, устанавливаю эмулятор«разрядить» и выключить экран.Я не применяю какой-либо поминки.Тем не менее, мой IntentService никогда не прерывается.Он просто продолжает работать, и один onHandleIntent выполняется за другим.Вместо этого я ожидаю, что когда я выключу экран или устройство перейдет в режим сна, IntentService должен быть уничтожен.Это предположение не правильно?Мой эмулятор не имитирует сон / дрему должным образом или почему на мой IntentService это не влияет?

public class ExampleService extends IntentService {
    public static final String TAG = "IntentService";

    public ExampleService() {
        super("bla");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(TAG, "onHandleIntent");
        String input = intent.getStringExtra("inputExtra");

        runInBackground(input);
    }


    private void runInBackground(String input) {
        for (int i = 0; i < 40; i++) {
            Log.d(TAG, input + " " + i);
            SystemClock.sleep(1000);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }
}

Я запускаю этот IntentService с моего MainActivity несколько раз, поэтому он работает около 30-60 мин :

public void startService(View v) {
    String input = editTextInput.getText().toString();

    Intent serviceIntent = new Intent(this, ExampleService.class);
    serviceIntent.putExtra("inputExtra", input);

    startService(serviceIntent);
}

1 Ответ

0 голосов
/ 13 ноября 2018

Мой эмулятор неправильно имитирует сон / дрему или почему мой IntentService не влияет?

Похоже, ваш эмулятор не переведен в режим ожидания.

Служба IntentService должна быть уничтожена

нет. Служба будет приостановлена, но не уничтожена полностью

Попробуйте выполнить следующие действия:

  1. Убедитесь, что вы настроили эмулятор с Android 6 или выше
  2. Запустить приложение, заблокировать устройство
  3. Включить режим ожидания с помощью команды ADB $ adb shell dumpsys deviceidle force-idle

См. Официальную документацию о «режиме ожидания» и «режиме ожидания». https://developer.android.com/training/monitoring-device-state/doze-standby

...