0

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

谢谢

4

2 回答 2

5

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

您可以做的是,使用AlarmManagerBroadcastReceiver表示计时器已到。这BroadcastReceiver可以反过来调用一个Serviceor Activity,您可以在其中做任何您喜欢的事情。

于 2013-11-08T09:33:18.683 回答
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=trueonPause()活动中

@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;
}
于 2013-11-08T09:41:12.193 回答