首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在周期性任务中等待异步回调吗?

在周期性任务中等待异步回调吗?
EN

Stack Overflow用户
提问于 2017-11-06 20:55:33
回答 1查看 108关注 0票数 0

我想每4小时左右检查一次用户的位置,我不想让我的应用程序运行。看起来,使用带有GcmTaskService的PeriodicTask会让我的服务被调用(WakefulBroadcastReceiver有限制,当应用程序在安卓6+中被停止时,就会启动任务),并且它将与Android4.4兼容(与JobScheduler不同)--这是我支持的最低版本。

问题是GcmTaskService的onRunTask方法是同步的,但我想使用它来请求位置并处理结果(LocationManager将异步调用我的LocationListener实现)。

如何处理这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 16:36:06

使用简单的等待/通知:

代码语言:javascript
复制
private interface RunnableLocationListener extends Runnable, LocationListener {}

@Override
public int onRunTask (TaskParams params) {
    final Object monitor = new Object();
    final AtomicBoolean located = new AtomicBoolean();
    new Thread(new RunnableLocationListener() {
        Context context = PeriodicCollector.this;
        public void run() {
            Criteria criteria = new Criteria();
            criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
            LocationManager locationManager = locationManager = (LocationManager)PeriodicCollector.this.getSystemService(Context.LOCATION_SERVICE);
            locationManager.requestSingleUpdate(criteria, this, Looper.getMainLooper());
        }

        @Override
        public void onLocationChanged(Location location) {
            // handle location here

            synchronized (monitor) {
                located.set(true);
                monitor.notifyAll();
            }
        }

        @Override public void onProviderDisabled(String s) {}
        @Override public void onProviderEnabled(String s) {}
        @Override public void onStatusChanged(String s, int i, Bundle b) {}
    }).start();

    int status = GcmNetworkManager.RESULT_FAILURE;
    try {
        synchronized (monitor) {
            if (!located.get()) {
                monitor.wait();
            }
        }
    } catch (InterruptedException e) {
        status = GcmNetworkManager.RESULT_SUCCESS;
    }
    return status;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47145616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档