我们的应用中有一个时钟小部件。 小部件需要每分钟更新一次才能显示正确的时间。
在Android O中,建议使用JobScheduler进行后台更新。 不幸的是,存在局限性。
答案 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
广播注册接收器;您需要重新计算显示的时间以及何时响应该广播而发生下一次更新。