我正在尝试创建一个倒数计时器,即使应用程序被发送到后台也会运行?我不确定如何使用服务来实现这一点,所以是否可以在 asyncTask 的 doBackground 方法中运行它,并且即使应用程序“最小化”,计时器也会继续运行吗?
谢谢
我正在尝试创建一个倒数计时器,即使应用程序被发送到后台也会运行?我不确定如何使用服务来实现这一点,所以是否可以在 asyncTask 的 doBackground 方法中运行它,并且即使应用程序“最小化”,计时器也会继续运行吗?
谢谢
doInBackgroud()
在不同的线程上运行。但这并不意味着它没有与应用程序绑定。如果应用程序停止,请AsyncTask
停止。所以你的计时器在这里没有帮助。
您可以做的是,使用AlarmManager
来BroadcastReceiver
表示计时器已到。这BroadcastReceiver
可以反过来调用一个Service
or Activity
,您可以在其中做任何您喜欢的事情。
如果你想使用 asynctask 来运行倒数计时器并且你想在 UI 上显示,你不能使用 doInBackground,因为它不能干预 UI。
我认为你应该使用线程来解决这个问题。如果您希望/不希望在应用程序最小化时继续运行计时器,您可以使用布尔变量来控制(必须使用 runOnUiThread 来干预 UI)
如何使用:
boolean stop=false;
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (!stop) {
//YOUR CODE HERE
}
}
});
如果您想在应用程序最小化时停止计时器,使用可以设置stop=true
在onPause()
活动中
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
stop=true;
}
stop=false
如果您想在活动恢复时重新播放计时器,您可以设置onResume()
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
stop=false;
}