gpt4 book ai didi

Android:后台服务中的计时器

转载 作者:太空狗 更新时间:2023-10-29 15:49:23 26 4
gpt4 key购买 nike

问候,

我正在尝试实现一个计时器,该计时器每 10 秒向我的服务器发送一次 GPS 坐标。

这是我正在实现的服务的代码 fragment :

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Timer timer=new Timer();
TimerTask tt=new TimerTask(){
@Override
public void run() {
Location loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
sendCoords(String.valueOf(loc.getLatitude()), String.valueOf(loc.getLongitude()));
Toast.LENGTH_SHORT).show();
Log.i("EOH",String.valueOf(loc.getLatitude()));
}
};
timer.schedule(tt,0,10000);

return START_STICKY;
}

现在的问题是 run() 中的任何内容都会导致我的应用程序强制关闭。

这是 LogCat 转储:

12-28 18:44:18.284: ERROR/AndroidRuntime(6537): FATAL EXCEPTION: Timer-0 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): at android.os.Handler.(Handler.java:121) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): at prestocab.driver.Background$2.(Background.java:83) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): at prestocab.driver.Background.sendCoords(Background.java:83) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): at prestocab.driver.Background$3.run(Background.java:114) 12-28 18:44:18.284: ERROR/AndroidRuntime(6537): at java.util.Timer$TimerImpl.run(Timer.java:289) 12-28 18:44:18.554: ERROR/WindowManager(1310): return in removeWindowLocked

有人可以建议解决这个问题吗?

我试过使用 locationManager onLocationChanged() 函数,但我无法将间隔设置为 10 秒。显然,指定的时间只是一个指导,操作系统决定什么是最好的。即使我将间隔设置为 100 秒,它也会每隔一秒左右给我一次位置。这就是我使用计时器的原因。

我希望有人能提出一些建议。

提前致谢

最佳答案

I am trying to implement a timer that sends GPS coordinates to my server every 10 seconds.

那是不现实的。您可能根本得不到任何修复。您可能要等到 10 秒后才能得到修复。例如,我正在测试一项旨在帮助开发人员以低得多的频率(例如,每小时一次)轮询位置更新的服务,并且即使通过电话也很容易花费一分钟多的时间来获得修复坐在窗前。

Here is the code snippet from the Service I'm implementing:

这是有缺陷的。 getLastKnownLocation() 通常会返回 null,对于初学者来说,超出了您的 Timer/TimerTask 问题。

I hope someone can suggest something.

我会首先重新设计您的应用,以摆脱 10 秒概念这一硬性要求。

然后,使用requestLocationUpdates()。如果您获得太多读数,请忽略您不想要的读数,并且不要将它们发送到服务器。当然,考虑到保持 GPS radio 开启所涉及的电池消耗,请仅在短时间内运行此程序并且仅基于积极的用户请求(例如,明确运行您的应用程序)。

requestLocationUpdates() 的文档在时间方面绝对令人困惑——我最近才意识到不一定遵守最短时间。

关于Android:后台服务中的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com