我正忙着为我的手机申请一个项目。我不是程序员,所以到目前为止已经学会了一些java for android。
当应用程序在手机上运行时,我每隔60秒运行一次方法。
应用程序使用GPS然后发送用户ID& Gps与服务器合作。
所以我有一个方法(getLoc)获取位置&然后调用send to server方法并保存到SD卡方法。
这是为了概念证明&我只需要在接下来的几天内在我的车上运行应用程序,同时将手机连接到车载充电器&不让它睡觉我需要在接下来的几天里开车时记录一些“测试”数据(GPS Coords)。
我正在寻找最简单的方法,每隔60秒重复一次该方法,将位置管理器运行时的数据发送到服务器。不断得到位置..
如何让方法getLoc每隔60秒运行一次?
答案 0 :(得分:4)
这种方法存在一些问题:
您无法始终收集位置数据,因为当设备进入睡眠模式时,用户进程将停止执行并暂停网络。
一直运行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
答案 1 :(得分:1)
答案 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);
但是这个解决方案不是最佳的,如果手机进入睡眠模式,它将停止工作。要正确执行此操作,您应该设置LocationListener或AlarmManager。
正如其他帖子所说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);
}