我正在使用Service
运行AlarmManager
。 Service
运行正常,我手动停止Service
(点击Button
),但我需要在某个时间后停止Service
(可能是10秒) 。我可以使用this.stopSelf();
,但如何在一段时间后调用this.stopSelf();
?
答案 0 :(得分:3)
这可以使用timer
和timerTask
轻松完成。
我仍然不知道为什么没有提出这个答案,而是提供的答案没有提供直接和简单的解决方案。
在服务子类中,全局创建它们(您可以不全局创建它们,但可能会遇到问题)
//TimerTask that will cause the run() runnable to happen.
TimerTask myTask = new TimerTask()
{
public void run()
{
stopSelf();
}
};
//Timer that will make the runnable run.
Timer myTimer = new Timer();
//the amount of time after which you want to stop the service
private final long INTERVAL = 5000; // I choose 5 seconds
现在在服务的onCreate()
内,执行以下操作:
myTimer.schedule(myTask, INTERVAL);
这应该在5秒后停止服务。
答案 1 :(得分:2)
您可以考虑使用IntentService吗?当它没有工作时它将被停止,所以你不需要自己管理它的状态。
答案 2 :(得分:1)
在服务中使用Handler
的 postDelayed 方法来完成它。例如:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
stopSelf();
}
}, 10000); //will stop service after 10 seconds
答案 3 :(得分:0)
Intent
以启动Service
。将action
设置为自定义操作,例如"com.yourapp.action.stopservice"
。 AlarmManager
,启动Intent
以启动Service
(无论您现在正在做什么)。如果已经运行,则会将onStartCommand()
传递给Service
。onStartCommand()
中,查看来电action
的{{1}}。如果Intent
,请使用action.equals("com.yourapp.action.stopservice")
停止Service
。答案 4 :(得分:0)
在 Kotlin 中,您可以使用此代码在 onStartCommand() 方法中停止服务:
Handler(Looper.getMainLooper()).postDelayed({ stopSelf() }, 10000)