繁体   English   中英

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

[英]Repeating a method every 60 seconds in Java on Android

我正忙于为我的手机项目申请。 我不是程序员,因此到目前为止,我已经为Android学习了一些Java。

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

该应用程序使用GPS,然后将用户ID和Gps坐标发送到服务器。

所以我有一个方法(getLoc),它获取位置信息,然后调用发送到服务器方法并保存到SD卡方法。

这是出于概念验证的目的,我只需要在手机连接到车载充电器且不让其进入睡眠状态的情况下,在接下来的几天内在汽车中运行该应用程序。 在接下来的几天里,我需要记录一些“测试”数据(GPS坐标)。

我只是在寻找最简单的方法,即每60秒重复一次将位置数据发送到服务器,同时位置管理器不断运行并获取位置的方法。

我如何保持getLoc方法每60秒运行一次?

这种方法的几个问题:

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

  2. 始终运行GPS将在数小时内耗尽电池。

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

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

如果您想以正确的方式处理位置数据,则比仅以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

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

签出Handler类以延迟执行方法,但是如果每60秒执行一次方法,请告别电池。

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

在一段时间内重复执行任务的“简单”答案:

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秒会蒸发掉电池

//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);
    }

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

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

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

编辑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM