나는 service
을 작성하여 새로운 작업을 수행하기 위해 thread
을 시작합니다. 안드로이드 O에서, service
이 foreground service
이 아닌 경우 안드로이드 문서에 따르면 시스템에 의해 중지됩니다. 그러나 다음 코드를 테스트 한 결과 service
은 파괴되었지만 thread
은 여전히 실행 중입니다.배터리 소모를 줄이기 위해 Android O가 백그라운드 서비스에 미치는 영향은 무엇입니까?
제 질문은 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");
}
}
그의 질문에 전혀 대답하지 않습니다 –
그래서 서비스 + 스레드 방식을 사용하면 안드로이드 O 배경 제한이 저에게 영향을 미치지 않을 것입니다, 맞습니까? – akabc
Android O에서 앱이 포 그라운드에서 실행되는 경우 JobService 만 실행됩니다. 앱이 포 그라운드가 아닌 경우 서비스와 스레드가 삭제됩니다. – Bhushan