Android O:我们可以制作时钟部件吗?

时间:2017-08-16 06:55:40

标签: android widget android-jobscheduler

我们的应用中有一个时钟小部件。 小部件需要每分钟更新一次才能显示正确的时间。

在Android O中,建议使用JobScheduler进行后台更新。 不幸的是,存在局限性。

  1. 不能在15分钟的间隔内调用JobService的定期更新。
  2. JobService.onStartJob()的时刻是不可预测的。我们可能会错过更新分钟数字(第59秒)的确切时刻。
  3. 之前我们曾经使用Handler.postDelayed()运行后台服务来更新小部件中的时间。 在O中,后台服务可以由系统终止。

    您如何推荐在Android O中实现时钟小部件?

    现在这可能吗?

    enter image description here

2 个答案:

答案 0 :(得分:6)

使用" TextClock"小部件控件,它受RemoteView功能支持,它每分钟都自动更新,不需要使用那些花哨的JobScheduler作业。

这样的事情可以解决问题:

<LinearLayout
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextClock
        android:id="@+id/dateText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:format12Hour="@string/date_text_format_12h"
        android:format24Hour="@string/date_text_format_24h"
        android:gravity="bottom|center_horizontal"
        android:textColor="@android:color/black"
        android:textSize="@dimen/date_text_size_default"/>

    <TextClock
        android:id="@+id/timeText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:format12Hour="@string/time_text_format_12h"
        android:format24Hour="@string/time_text_format_24h"
        android:gravity="top|center_horizontal"
        android:textColor="@android:color/black"
        android:textSize="@dimen/time_text_size_default"
        android:textStyle="bold"/>

</LinearLayout>

答案 1 :(得分:-4)

这是一个小部件;它不需要一直更新 - 只有当它可见时才更新。为什么你想在你的小部件没有运行时浪费电池来跟踪当前时间?

当小部件变得可见时,查看当前时间并立即绘制。此外,计算下一分钟的顶部何时,并将延迟消息或Runnable发布到将在此时触发的处理程序。当该消息/ Runnable执行时,更新您的时间显示并在下一分钟的顶部重新发布消息/ Runnable。

您还应该为当前时间更改时警报管理器发出的Intent.ACTION_TIME_CHANGED广播注册接收器;您需要重新计算显示的时间以及何时响应该广播而发生下一次更新。