Android LocationManager和活套-每个线程只能创建一个活套

Android LocationManager和活套-每个线程只能创建一个活套,android,location,looper,Android,Location,Looper,我的应用程序有问题。我需要以一定的间隔获得位置更新,因此基本上需要能够很好地控制GPS模块,这在Android操作系统中并不容易。基本上我需要以5分钟的间隔打开GPS 2分钟。我已经停止计时,我可以获得两次位置,但随后应用程序崩溃并出现运行时错误-每个线程只能创建一个循环器。计时是在一个服务类中完成的,效果很好,它删除了更新和我遇到的所有问题 我最初有一个错误——“无法在未调用Looper.prepare()的线程内创建处理程序”,我用下面的代码修复了这个错误,但现在我只得到一个Looper错误

我的应用程序有问题。我需要以一定的间隔获得位置更新,因此基本上需要能够很好地控制GPS模块,这在Android操作系统中并不容易。基本上我需要以5分钟的间隔打开GPS 2分钟。我已经停止计时,我可以获得两次位置,但随后应用程序崩溃并出现运行时错误-每个线程只能创建一个循环器。计时是在一个服务类中完成的,效果很好,它删除了更新和我遇到的所有问题

我最初有一个错误——“无法在未调用Looper.prepare()的线程内创建处理程序”,我用下面的代码修复了这个错误,但现在我只得到一个Looper错误

我的活套线程看起来像这样(请不要太苛刻,我对Android非常陌生lol)

就像我说的,我是新手,我不知道如何使用处理程序。我确实从StackOverflow这里的一篇文章中得到了一些代码,只是用了不同的方法,但它不起作用

求你了,我真的需要帮助。 谢谢你的回复

好的,我似乎已经找到了解决方案,只需要测试一下,然后再等7个小时,我就可以发布答案了。
感谢您的意见和回复。

无法理解您的代码在做什么:) 为什么不使用这样简单的方法:

public void run( ) {
    while (true) {
        LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, locationListener);
        sleep(2 * 60 * 1000);
        LocationManager.removeUpdates();
        sleep(5 * 60 * 1000);
    }
}

好吧,也许是这样的

Runnable start = new Runnable( ) {
    public void run( ) {
        LocationManager.startLocationUpdates
        handler.postDelayed(stop, 2 * 60 * 1000L);
    }
}

Runnable stop = new Runnable( ) {
    public void run( ) {
        LocationManager.removeLocationUpdates
    }
}

Runnable onePeriod = new Runnable( ) {
    public void run( ) {
        handler.postDelayed(onePeriod, 5 * 60 * 1000);
        handler.post(start);
    }
}

public void startContiniuosListening( ) {
    handler.post(onePerion);
}

public void stopContiniousListening( ) {
    handler.removeCallback(stop);
    handler.removeCallback(onePeriod);
    LocationManager.removeLocationUpdates(...)
}
其中,处理程序是类字段:

Handler handler = new Handler();

我发现对一个类似问题的回答非常有用:

基本上,您只需要将问题中的代码封装在自己的线程中

new Thread(new Runnable() {
    // Your code here...
}).start();

然后这个工作线程将创建自己的循环器。

因为虽然我需要每5个mun轮询2分钟,但我还需要能够控制它必须轮询的时间和地点。例如,如果一个人在里面,他必须离开,直到他们在外面(我有一部分工作),但我需要让活套的东西运行我也不知道我应该在哪里或是否调用Thread.run(),因为我会假设它必须做一次,但只有一次,否则会创建一个新的活套。哈哈,是的。我觉得很相似,但我在另一节课上控制了时间。非常感谢您的帮助,我稍后也会发布我的答案:-)我只使用了一个处理程序,并在需要另一个gps定位时发布了一个新的处理程序,就成功地让它工作了。它工作得很好,我不知道它是否很优雅,但它工作得很好:-)你能把你找到的解决方案作为答案发布吗?
new Thread(new Runnable() {
    // Your code here...
}).start();