如何创建一个从Activity更新TextView的Timer,并且当应用程序进入后台时,它保持运行状态

时间:2019-04-05 09:57:40

标签: java android kotlin

我想弄清楚如何执行此操作,我想根据服务器发出的数据创建计时器,例如:3600 <-来自服务器,因此我想创建计时器这段时间有一个TextView每隔1秒钟更新一次,一旦计时器完成,就创建一个对话框,我知道该怎么做是没有必要的,但是我想让用户将应用程序置于后台计时器保持运行。

我想创建一个BroadcastService并从那里更新TextView,如果应用在onPause()中进入后台,我应该做一些事情来保持计时器的运行,并且考虑到计时器是否已完成,请将其添加到SharedPreferences中,这样我就可以知道计时器是否已完成(如果用户在后台运行应用程序)。

我该如何实现?

2 个答案:

答案 0 :(得分:2)

Use foreground service we can run countdowntimer that runs in background

Foreground service example Github

答案 1 :(得分:1)

您可以使用Handler在您的自定义Application类中进行定期同步。仅当您的应用程序被杀死时,该处理程序才会被销毁。

您可以将Application类扩展为:

public class App extends Application {

    private static final long ONE_MINUTE = 60 * 1000;

    private Handler handler;

    @Override
    public void onCreate() {
        super.onCreate();

        this.handler = new Handler();
        this.handler.postDelayed(syncData, ONE_MINUTE);
    }

    private Runnable syncData = new Runnable() {
        @Override
        public void run() {
            // TODO startSync();
            handler.postDelayed(this, ONE_MINUTE);
        }
    };
}

在该Runnable中,您可以做任何您想做的事,例如使用共享的首选项。

您可以将此自定义App类设置为AndroidManifest.xml中的应用程序类。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="your_package_name">

    <application
        android:name=".App"
        rest of your code .... >
    </application>

</manifest>