我创建了一个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");
}
}
答案 0 :(得分:0)
您是否长时间测试此行为?我在内部运行一个工作线程的服务(通过主线程启动)进行相同的设置。在测试设置更长的持续时间,如2-3天。您会注意到系统会关闭整个过程。因此,您不能依赖于使用工作线程执行后台执行。更好的方法是使用定期或定时的工作。