在Android上的Java中每60秒重复一次方法

时间:2011-10-03 19:01:59

标签: java android

我正忙着为我的手机申请一个项目。我不是程序员,所以到目前为止已经学会了一些java for android。

当应用程序在手机上运行时,我每隔60秒运行一次方法。

应用程序使用GPS然后发送用户ID& Gps与服务器合作。

所以我有一个方法(getLoc)获取位置&然后调用send to server方法并保存到SD卡方法。

这是为了概念证明&我只需要在接下来的几天内在我的车上运行应用程序,同时将手机连接到车载充电器&不让它睡觉我需要在接下来的几天里开车时记录一些“测试”数据(GPS Coords)。

我正在寻找最简单的方法,每隔60秒重复一次该方法,将位置管理器运行时的数据发送到服务器。不断得到位置..

如何让方法getLoc每隔60秒运行一次?

6 个答案:

答案 0 :(得分:4)

这种方法存在一些问题:

  1. 您无法始终收集位置数据,因为当设备进入睡眠模式时,用户进程将停止执行并暂停网络。

  2. 一直运行GPS会在几个小时内耗尽电池。

  3. 如果您强制每隔60秒使用一次网络(通过AlarmManager唤醒手机),那么网络永远不会关闭,这会比GPS更快地消耗电池。

  4. 即使用户不移动,您还想更新数据吗?因为平均而言,用户不会经常移动。

  5. 如果您想以正确的方式处理位置数据,那么它比以60秒的间隔收集位置更复杂。我强烈建议你阅读这篇优秀的博文:http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

    第2部分:http://blog.radioactiveyak.com/2011/06/deep-dive-into-location-part-2-being.html

答案 1 :(得分:1)

请参阅this问题以及Android计时器的this参考文档。

答案 2 :(得分:1)

检查Handler类是否延迟执行方法,但是如果你每60秒执行一次方法,请告诉你的电池。

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,长)

答案 3 :(得分:1)

随时重复任务的“简单”答案:

final static long REFRESH=60*1000;
final static int SUBJECT=0;
Handler locationHandler= new Handler(){
    public void handleMessage(Message msg){
        if (msg.what==SUBJECT){
            getLoc();
            this.sendEmptyMessageDelayed(SUBJECT, REFRESH);
        }
    }
};

说明赛道:

       locationHandler.sendEmptyMessage(SUBJECT);

停止它:

       locationHandler.removeMessages(SUBJECT);

但是这个解决方案不是最佳的,如果手机进入睡眠模式,它将停止工作。要正确执行此操作,您应该设置LocationListenerAlarmManager

正如其他帖子所说60秒,因为刷新会使电池汽化

答案 4 :(得分:0)

在Java中,您将创建一个在后台运行的线程。

我不确定这是在Android上执行此操作的正确方法。

您是否希望仅在用户查看应用程序时或在其仍在后台运行时运行?

修改

实际上,使用java.util.Timer和java.util.TimerTask代替Thread。

答案 5 :(得分:0)

//Method for the visibility of Resend button after 60 seconds passed

private void VisibleBtnResend60() {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {

                //call anything you want to perform

                mResendButton.setVisibility(View.VISIBLE);
                enableViews(mResendButton);
            }
        }, 60000);
    }