我在 Intent 服务中有以下代码(我必须使用 Intent 服务)
//TIME HANDLER
Log.i("start", "start getting data acc & gps");
//Register listeners and start getting data
//
// ACC:
onStartAcc();
//
handle_lower.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("stop getting data", "STOP");
//Stop listeners
//
// ACC:
onStopAcc();
//==========================================================================
//HERE IS CALCULATING STATUS
//
status.calculateState();
//==========================================================================
}
}, Constants.TIME_ACCELEROMETER_GETTING);
它不会调用 runnable,不会显示日志,也不会取消注册加速度计接收器。
我不知道为什么会这样。有人可以帮助我吗?
最佳答案
I have to use intentservice
对于此用例,您必须不使用IntentService
。
it doesn't call runnable, no log is shown and accelerometer receiver is not unregistered
一旦 onHandleIntent()
返回,IntentService
将关闭并消失。因此,您不能在 IntentService
中注册监听器、派生线程、使用实现不佳的计时系统等。
欢迎您使用服务
。将您的 postDelayed()
内容转换为 ScheduledExecutorService
(这样您的工作就在后台线程上完成),并确保您调用了 stopSelf()
在适当的时候关闭服务。
关于android - Intentservice 不调用 runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465523/