[英]Repeating a method every 60 seconds in Java on Android
我正忙于为我的手机项目申请。 我不是程序员,因此到目前为止,我已经为Android学习了一些Java。
在应用程序在手机上运行时,我每60秒运行一次方法。
该应用程序使用GPS,然后将用户ID和Gps坐标发送到服务器。
所以我有一个方法(getLoc),它获取位置信息,然后调用发送到服务器方法并保存到SD卡方法。
这是出于概念验证的目的,我只需要在手机连接到车载充电器且不让其进入睡眠状态的情况下,在接下来的几天内在汽车中运行该应用程序。 在接下来的几天里,我需要记录一些“测试”数据(GPS坐标)。
我只是在寻找最简单的方法,即每60秒重复一次将位置数据发送到服务器,同时位置管理器不断运行并获取位置的方法。
我如何保持getLoc方法每60秒运行一次?
这种方法的几个问题:
您无法一直收集位置数据,因为当设备进入睡眠模式时,用户进程将停止执行,并且网络将被挂起。
始终运行GPS将在数小时内耗尽电池。
如果您每60秒强制使用一次网络(通过AlarmManager,唤醒电话),则网络将永远不会关闭,这将比GPS更快地消耗电池电量。
即使用户不动也要更新数据吗? 因为平均而言,用户不经常移动。
如果您想以正确的方式处理位置数据,则比仅以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
签出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);
但是此解决方案不是最佳解决方案,如果电话进入睡眠模式,它将停止工作。 为了正确执行此操作,您应该制作一个LocationListener或AlarmManager 。
正如其他帖子所说的那样,刷新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.