【问题标题】:Android make method run every X seconds (involves gps and server call)Android make 方法每 X 秒运行一次(涉及 gps 和服务器调用)
【发布时间】:2011-12-03 08:59:43
【问题描述】:

我有一个小众应用程序,它需要每隔几秒钟向服务器发送一次它的位置。 (不用担心手机的电池寿命)。我如何让线程或某事每隔几秒执行一次?我有一个 gpslistener,但它的子类的名称是 "onlocationchanged",它似乎只想在位置发生变化时提供信息,我需要每次都将更新的位置发送到服务器,尽管在我定义的时间间隔内

我该怎么做?

见识见识

【问题讨论】:

    标签: java android multithreading gps intervals


    【解决方案1】:

    将其放在服务的onCreate 中。

      mTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
               // What you want to do goes here
             }
        }, 0, REFRESH_TIME);
    

    REFRESH_TIMErun 重复自身时的频率或时间(以毫秒为单位)。

    【讨论】:

    • Java 计时器在单独的线程中运行,更符合 Android 的方法是使用处理程序。另一方面,网络请求最好还是发生在单独的线程中..
    • 谢谢你,这很好用......只需要像这样改变:new Timer().scheduleAtFixedRate(new TimerTask() {
    【解决方案2】:

    您不能只询问 android 的当前位置。 GPS 需要一些时间并且可能不可用。这在post 中有说明。

    你可以做的是使用一个类似 user500865 提到的计时器,然后像这样请求最后一个已知位置

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this);
    Location l = null;
    l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    

    您可以跟踪最后一个位置,并在新位置不同或相同时执行一些逻辑。

    方法requestLocationUpdates有以下参数:

    minTime - 通知的最小时间间隔,以毫秒为单位。此字段仅用作省电提示,位置更新之间的实际时间可能大于或小于此值。

    minDistance - 通知的最小距离间隔,以米为单位

    使用这些自定义您想要获取位置更新的频率

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2018-11-08
      • 2019-02-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多