非粘性服务会自行启动并崩溃

时间:2018-11-15 08:55:48

标签: android android-service

我的服务类别代码: 我正在使用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);。请不要推荐其他方法,我有一个工作计划员在做同样的工作,我只是想学习服务。

1 个答案:

答案 0 :(得分:0)

由于onStartCommand位于UI线程上,因此您将获得ANR。对于这类工作,只需使用IntentServiceJobIntentService(如果您不关心启动的确切时间,并且希望使其在Oreo上具有新的限制)就可以使用。