Android O如何影响后台服务以减少电池消耗?

时间:2017-10-26 09:18:52

标签: android service android-8.0-oreo

我创建了一个service来启动新的thread来做事。在 Android O 中,android文档说如果service不是foreground service,那么它将被系统停止。但我测试了以下代码,service被销毁但thread仍在运行。

我的问题是,即使service被停止,如果允许线程运行,系统如何保存用户的电池?

MainActivity

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }

  public void startService(View view) {
    Intent intent = new Intent(this, MyService.class);
    startService(intent);
  }

  public void stopService(View view) {
    stopService(new Intent(this, MyService.class));
  }

}

为MyService

public class MyService extends Service {

  @Nullable
  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(new Runnable() {
      @Override
      public void run() {
        while (true) {
          try {
            Thread.sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          System.out.println("run in service: ");
        }
      }
    }).start();

    return START_NOT_STICKY;
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    System.out.println("service onDestroy");
  }

}

1 个答案:

答案 0 :(得分:0)

您是否长时间测试此行为?我在内部运行一个工作线程的服务(通过主线程启动)进行相同的设置。在测试设置更长的持续时间,如2-3天。您会注意到系统会关闭整个过程。因此,您不能依赖于使用工作线程执行后台执行。更好的方法是使用定期或定时的工作。