我应该使用哪种服务在后台访问传感器数据?

时间:2019-02-10 18:15:44

标签: android wear-os

我成功地使用了一项服务来在前台执行某些任务。现在,要在后台执行此操作,我将删除handler.removeCallbacks中的onDestroy()方法。

但这也会阻止我使用stopService(intent)停止服务。

我在官方文档中看到应该 使用JobScheduler(因为我的目标是API 28)。

以下是我的代码的更精确的说明:

public class MainActivity {
    private Intent intent;    
    onCreate() {
        if (intent == null) {
            intent = new Intent(this, MyService.class);
        }
    }
    startService(intent);
    ... // Then is some code to  stop the service if needed with  stopService(intent)
}
--------------------------------------------------------------
public class myService {
    private Handler handler = null;
    private static Runnable runnable = null;
    @Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    handler = new Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running service times " + i);
            i++;
            handler.postDelayed(runnable, 1000);
        }
    };
    handler.post(runnable);
}

@Override
public void onDestroy() {
    handler.removeCallbacks(runnable);
    super.onDestroy();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return super.onStartCommand(intent, flags, startId);
}

我希望它在后台运行(即使设备已锁定),但仍然能够禁用该服务(或JobScheduler?)。

您有什么建议?

1 个答案:

答案 0 :(得分:1)

您可以使用work manager

job dispatcher

,有很多选择,例如 SyncAdapter,绑定服务,意图服务

您可以根据需要使用以下选项之一