asinTask的doInBackground在后台运行吗?

时间:2013-11-08 09:23:39

标签: android android-asynctask countdowntimer

我正在尝试创建一个即使将应用程序发送到后台也会运行的倒计时器?我不确定如何使用服务来实现它,所以是否可以在asyncTask的doBackground方法中运行它,即使应用程序被“最小化”,计时器是否会继续运行?

感谢名单

2 个答案:

答案 0 :(得分:5)

doInBackgroud()在不同的线程上运行。但这并不意味着它与应用程序无关。如果应用停止,AsyncTask就会停止。所以你的计时器在这里没有任何帮助。

您可以做的是,使用AlarmManager来调用表示计时器已启动的BroadcastReceiver。这个BroadcastReceiver可以依次调用ServiceActivity,您可以随意执行任何操作。

答案 1 :(得分:0)

如果你想使用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;
}