1

我需要创建一个通过两个按钮启动和停止的后台服务。我的服务每 5 分钟循环一次,它会从在线数据库中获取数据。我在某处读到 IntentService 类不用于循环。我会覆盖 onStartCommand,所以它会返回 START_STICKY。如果我在这堂课上这样做,我的服务将不会启动。我怎样才能做到这一点?

public class MainActivity extends AppCompatActivity {

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

    public void start(View view){
        startService(new Intent(this, ForegroundService.class));
    }

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




public class ForegroundService extends IntentService{

    private boolean stato;


    public ForegroundService(){
        super("ForegroundService");
    }

    @Override
    public void onCreate(){
        super.onCreate();
        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onHandleIntent(Intent i){
        stato = true;
        int n=0;
        while(stato)
        {
            Log.i("PROVA SERVICE", "Evento n."+n++);
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            { }
        }
    }

    @Override
    public void onDestroy() {
        stato = false;
        Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }

}
4

1 回答 1

0

只有在主动向用户提供价值时才运行服务。坐着看时钟滴答声并没有积极地为用户提供价值。

另外,请理解您想要的(“每 5 分钟循环一次,它将从在线数据库中获取数据”)可能不是用户想要的,当然也不是 Google 想要的。太多的开发人员正在做这样的事情,因此电池寿命受到影响。

一般来说,你最好的解决方案(给定你的目标)是,如果你低于 21 岁JobScheduler,可能会退回到。这两者都允许你安排定期工作。您的进程不需要在这些工作之间运行。您教授或触发工作的频率,并且您在 a或.AlarmManagerminSdkVersionJobSchedulerAlarmManagerJobServiceIntentService

请记住,在 Android 6.0+ 上,除非用户通过“设置”应用告诉 Android 让您的应用不理会,否则您的应用最终会进入打盹模式或应用待机模式,您将无法每五分钟获得一次控制。

于 2016-06-01T17:23:38.750 回答