我的服务类别代码:
我正在使用android.app.Service
public class ServiceClass extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: ");
// some work
stopService(intent);
return Service.START_NOT_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind: ");
return null;
}
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy: ");
super.onDestroy();
}
}
我通过以下方式启动
:startService(new Intent(MainActivity.this,ServiceClass.class));
当我运行它时,它会正确执行一次。但是随后,它尝试再次启动,并因以下错误而崩溃。
ANR in com.sample.service
PID: 7381
Reason: executing service com.sample.service/.ServiceClass
Load: 0.93 / 0.73 / 0.82
CPU usage from 59831ms to 0ms ago (2018-11-15 13:26:46.668 to 2018-11-15 13:27:46.500):
13% 1810/system_server: 8.7% user + 4.5% kernel / faults: 12123 minor
stopSelf();
给出相同的错误。我没有待定的意图,没有广播接收者,该服务已在清单中注册。工作部分是一个从1到100的forloop,当前线程处于休眠状态Thread.sleep(100);
。请不要推荐其他方法,我有一个工作计划员在做同样的工作,我只是想学习服务。
答案 0 :(得分:0)
由于onStartCommand位于UI线程上,因此您将获得ANR。对于这类工作,只需使用IntentService或JobIntentService(如果您不关心启动的确切时间,并且希望使其在Oreo上具有新的限制)就可以使用。